我的解决方案
因为我刚开始接触Java,对于其功能并不熟悉,想到的第一个解决方法是
通过前后对比 的方式进行判断,
不相同就赋值到新的节点上
class Solution {
public int removeDuplicates(int[] nums) {
int j=0;
for(int i=1;i<nums.length;i++){
if (nums[i]==nums[i-1]) {
continue;
}else{
j++;
nums[j]=nums[i];
}
}
return j+1;
}
}
因为刚用Java写,所以错了几次,不过问题不大,最后还是通过了.还不错
官方解决方案
既然是学习那么还是要看一下别人怎么写的,一题多解是不错的学习方法
来看看官方的代码
class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
if (n == 0) {
return 0;
}
int fast = 1, slow = 1;
while (fast < n) {
if (nums[fast] != nums[fast - 1]) {
nums[slow] = nums[fast];
++slow;
}
++fast;
}
return slow;
}
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-tudo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
感觉出奇的相似,因为他多命名了一个lenth变量所以空间上要多消耗一点,但我的代码也有点问题,每次循环都要调用一次lenth函数,这样就比较消耗cpu了,但是为什么我的代码时间上也是100%,有点疑惑,可能是用例太少的缘故吧,感觉他的代码更科学.
大佬解决方案
还有这位大神想法挺不错的,
可是什么就是编译不通过呢,想不通,还是个精选解答
我按照这位大哥的思想自己写了一下,终于通过了
class Solution {
public int removeDuplicates(int[] nums) {
int j=0;
for(int i=1;i<nums.length;i++){
if (nums[j]==nums[i]) {
continue;
}else{
j++;
nums[j]=nums[i];
}
}
return j+1;
}
}
总结
经过不同的解答方法看来,这个题就主要是对比与赋值,值得注意的是如何开始与结束,不要漏掉用例,也不要有未判断的数据混(最后一个)进去就行了