力扣-删除有序数组中的重复项2,多数元素

49 阅读1分钟

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

leetcode.cn/problems/re…

nums =[1,1,1,2,2,3]

return 5 [1,1,2,2,3]

/**
 * @param {number[]} nums
 * @return {number}
 */
 双指针
var removeDuplicates = function(nums) {
        var slow=0
        var fast=1
        var count=0
        while(fast<nums.length){
            //如果前两项相等 count++  count大于2时不记录
            if(nums[slow] == nums[fast]){
                count++
            }else{
                count = 0
            }
            //前两次出现时 使下一项为相同值  而当count重新为0时 slow的下一项就是fast 即为新的值
            if(count<2){
                nums[slow+1]=nums[fast]
                slow++
            }
            fast++
        }
        //起始从0开始 需要加1
        return slow+1
};


给定一个大小为 n **的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

 

示例 1:

输入: nums = [3,2,3]
输出: 3

示例 2:

输入: nums = [2,2,1,1,1,2,2]
输出: 2
//直接排序 如果这个出现了一半以上  那么一定在中间会出现一次
var majorityElement = function(nums) {
    nums.sort((a,b)=>a-b)
    return nums[Math.floor(nums.length/2)]
};




var majorityElement = function(nums) {
  let count = 0;
  let candidate = null;
  
  for (let num of nums) {
      if (count === 0) {
          candidate = num;
      }
      // count 作为出现次数 如果出现相同值 就加一分 不同就减去一分
      如果出现一半次以上 那么最后一定会有个数是count是正数
      count += (num === candidate) ? 1 : -1;
  }

    console.log(candidate);

};