给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
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);
};