题目:
给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在原地 修改输入数组并在使用 O(1) 额外空间的条件下完成。
使用思想:栈
左边区域:我们把它当作栈来用,只通过栈顶
stackSize来操作右边区域:还是普通数组,用索引
i来遍历
代码注释版:
class Solution { public int removeDuplicates(int[] nums) { int stackSize = 2;//表示栈中有两个元素 //从第三个元素开始遍历 for(int i=2;i<nums.length;i++){ // 只要当前数!=栈中倒二个元素,就让当前数进栈(因为前面肯定没有超过两个重复的) if(nums[i]!=nums[stackSize-2]){ nums[stackSize++]=nums[i];//赋值后自增,统计栈中元素个数 } //如果相等直接跳过->不许进栈 } // 栈中元素个数就是满足题意的最终数组长度 return stackSize; } }代码纯享版:
class Solution { public int removeDuplicates(int[] nums) { int stackSize = 2; for(int i=2;i<nums.length;i++){ if(nums[i]!=nums[stackSize-2]){ nums[stackSize++]=nums[i]; } } return stackSize; } }