给出一个按 非递减 顺序排列的数组 nums,和一个目标数值 target。假如数组 nums 中绝大多数元素的数值都等于 target,则返回 True,否则请返回 False。 所谓占绝大多数,是指在长度为 N 的数组中出现必须 超过 N/2 次。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/ch… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
- 1.题目要求超过N/2
- 2.给出数组是非递减的,也就是不是递增就是平级的数据
- 3.利用双指针向中间缩进,找到等于target的下标
- 4.左右下标相减+1 这个长度大于N/2就满足
/**
* @param {number[]} nums
* @param {number} target
* @return {boolean}
*/
var isMajorityElement = function(nums, target) {
if(nums.length == 0 || !nums || !target) {
return false
}
let minNeedLen = Math.floor(nums.length / 2)
let targetLen = 0;
let l = 0,r = nums.length - 1
while(l <= r) {
if(nums[l] < target) l++
if(nums[r] > target) r--
if(nums[l] == target && nums[r] == target) {
break
}
}
targetLen = r - l + 1
return targetLen > minNeedLen
};