力扣刷题日记-1150. 检查一个数是否在数组中占绝大多数

48 阅读1分钟

给出一个按 非递减 顺序排列的数组 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
};