We have an integer array nums, where all the integers in nums are 0 or 1. You will not be given direct access to the array, instead, you will have an APIArrayReader which have the following functions:
int query(int a, int b, int c, int d): where 0 <= a < b < c < d < ArrayReader.length(). The function returns the distribution of the value of the 4 elements and returns:
4 : if the values of the 4 elements are the same (0 or 1).
2 : if three elements have a value equal to 0 and one element has value equal to 1 or vice versa.
0 : if two element have a value equal to 0 and two elements have a value equal to 1.
int length(): Returns the size of the array.
You are allowed to call query()2 * n times at most where n is equal to ArrayReader.length().
Return any index of the most frequent value in nums, in case of tie, return -1.
Example 1:
Input: nums = [0,0,1,0,1,1,1,1]
Output: 5
Explanation: The following calls to the API
reader.length() // returns 8 because there are 8 elements in the hidden array.
reader.query(0,1,2,3) // returns 2 this is a query that compares the elements nums[0], nums[1], nums[2], nums[3]
// Three elements have a value equal to 0 and one element has value equal to 1 or viceversa.
reader.query(4,5,6,7) // returns 4 because nums[4], nums[5], nums[6], nums[7] have the same value.
we can infer that the most frequent value is found in the last 4 elements.
Index 2, 4, 6, 7 is also a correct answer.
Example 2:
Input: nums = [0,0,1,1,0]
Output: 0
Example 3:
Input: nums = [1,0,1,0,1,0,1,0]
Output: -1
Constraints:
5 <= nums.length <= 105
0 <= nums[i] <= 1
Follow up: What is the minimum number of calls needed to find the majority element?
# """# This is the ArrayReader's API interface.# You should not implement it, or speculate about its implementation# """# class ArrayReader(object):# # Compares 4 different elements in the array# # return 4 if the values of the 4 elements are the same (0 or 1).# # return 2 if three elements have a value equal to 0 and one element has value equal to 1 or vice versa.# # return 0 : if two element have a value equal to 0 and two elements have a value equal to 1.# def query(self, a: int, b: int, c: int, d: int) -> int:## # Returns the length of the array# def length(self) -> int:#classSolution:defguessMajority(self,reader:"ArrayReader")->int:n=reader.length()x=reader.query(0,1,2,3)a,b=1,0k=0foriinrange(4,n):ifreader.query(0,1,2,i)==x:a+=1else:b+=1k=iy=reader.query(0,1,2,4)ifreader.query(1,2,3,4)==y:a+=1else:b+=1k=0ifreader.query(0,2,3,4)==y:a+=1else:b+=1k=1ifreader.query(0,1,3,4)==y:a+=1else:b+=1k=2ifa==b:return-1return3ifa>belsek
/** * // This is the ArrayReader's API interface. * // You should not implement it, or speculate about its implementation * interface ArrayReader { * public: * // Compares 4 different elements in the array * // return 4 if the values of the 4 elements are the same (0 or 1). * // return 2 if three elements have a value equal to 0 and one element has value equal to 1 or * vice versa. * // return 0 : if two element have a value equal to 0 and two elements have a value equal * to 1. public int query(int a, int b, int c, int d); * * // Returns the length of the array * public int length(); * }; */classSolution{publicintguessMajority(ArrayReaderreader){intn=reader.length();intx=reader.query(0,1,2,3);inta=1,b=0;intk=0;for(inti=4;i<n;++i){if(reader.query(0,1,2,i)==x){++a;}else{++b;k=i;}}inty=reader.query(0,1,2,4);if(reader.query(1,2,3,4)==y){++a;}else{++b;k=0;}if(reader.query(0,2,3,4)==y){++a;}else{++b;k=1;}if(reader.query(0,1,3,4)==y){++a;}else{++b;k=2;}if(a==b){return-1;}returna>b?3:k;}}
/** * // This is the ArrayReader's API interface. * // You should not implement it, or speculate about its implementation * class ArrayReader { * public: * // Compares 4 different elements in the array * // return 4 if the values of the 4 elements are the same (0 or 1). * // return 2 if three elements have a value equal to 0 and one element has value equal to 1 or vice versa. * // return 0 : if two element have a value equal to 0 and two elements have a value equal to 1. * int query(int a, int b, int c, int d); * * // Returns the length of the array * int length(); * }; */classSol