1287. Element Appearing More Than 25% In Sorted Array
SourceBiweekly Contest 15 Q1DifficultyEasyRating1179
Description
Given an integer array sorted in non-decreasing order, there is exactly one integer in the array that occurs more than 25% of the time, return that integer.
Example 1:
Input: arr = [1,2,2,6,6,6,6,7,10] Output: 6
Example 2:
Input: arr = [1,1] Output: 1
Constraints:
1 <= arr.length <= 1040 <= arr[i] <= 105
Solutions
Solution 1: Traversal
Thinking
In a sorted array some value occurs more than \(25\%\), i.e. spans at least \(\lfloor n/4 \rfloor\). If \(\textit{arr}[i]=\textit{arr}[i+\lfloor n/4 \rfloor]\), that value already covers enough length. The first hit from the left is the answer; sorted order turns counting into an index comparison.
We traverse the array \(\textit{arr}\) from the beginning. For each element \(\textit{arr}[i]\), we check if \(\textit{arr}[i]\) is equal to \(\textit{arr}[i + \left\lfloor \frac{n}{4} \right\rfloor]\), where \(n\) is the length of the array. If they are equal, then \(\textit{arr}[i]\) is the element we are looking for, and we return it directly.
The time complexity is \(O(n)\), and the space complexity is \(O(1)\), where \(n\) is the length of the array \(\textit{arr}\).
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |