leetcode 150道题 计划花两个月时候刷完,今天(第二天)完成了两道(3-4)150:
- (26. 删除有序数组中的重复项) 题目描述:
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
第一版(我感觉还可以这个可以搞个通用的)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=1)return len;int index=0;int temp=nums[0];// 找出第一个 重复的for(int i=1;i<len;i++){if(temp==nums[i]){index=i;break;}else{temp=nums[i];}}// 执行调换 按相顺序去重if(index==0)return len;for(int i=index;i<len;i++){if(temp!=nums[i]){nums[index++]=nums[i];temp=nums[i];}}return index;}
}
第二版(看了之前写的,这题我之前也做过了,但是这次还是卡了很久,但是我感觉第二版没有我第一版好理解,不是很好想出来)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=1)return len;int index=1;int temp=nums[0];for(int i=1;i<len;i++){if(temp!=nums[i]){nums[index++]=nums[i];temp=nums[i];}}return index;}
}
4.(80. 删除有序数组中的重复项 II) 题目描述:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
第一版(这是上一题的延伸版,所以我就按我刚写的那样去想了,真的我感觉我这个可以作为一个通类,但是人家解题的也好像可以。。)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=2)return len;int index=0;int temp=nums[0];int flag=1;for(int i=1;i<len;i++){if(temp!=nums[i]){temp=nums[i];flag=1;}else{if(flag==2){index=i;break;}flag++;}}if(index==0)return len;for(int i=index;i<len;i++){if(temp!=nums[i]){nums[index++]=nums[i];temp=nums[i];flag=1;}else{flag++;if(flag<=2){nums[index++]=nums[i];}}}return index;}
}
第二版(确实很厉害,感觉遇到这类题,就可以全部这样去弄啊)
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=2)return len;int slow=2,fast=2;while(fast<len){if(nums[slow-2]!=nums[fast]){nums[slow]=nums[fast];slow++;}fast++;}return slow;}
}
我下来按照第一版思路写了一下这次的 第三题(26. 删除有序数组中的重复项),确实是模板直接通过了!!
他是数字只能出现一次,第四题是两次
class Solution {public int removeDuplicates(int[] nums) {int len=nums.length;if(len<=1)return len;int slow=1,fast=1;while(fast<len){if(nums[slow-1]!=nums[fast]){nums[slow]=nums[fast];slow++;}fast++;}return slow;}
}
学习太累了,真的今天差点没心情去搞这个 leetcode ,刷视频还是舒服,但是为了跳槽!!!加油。