leetcode-Remove Duplicates from Sorted Array II
2015-07-13 20:59
405 查看
算法思想:1、如果数组的长度小于2则删除重复后的数组长度则为原数组的长度
2、如果数组的长度大于2,设置两个变量初值i=0,j=1,k=0;
2.1如果num[i]=num[j],则只需把num[++k]=n[j]一次
2.2如果num[i]=num[j++],则把较大的j一直后移直到出现新的数字或者j的值大于数组长度,
2.3将j的值赋给i,并将j后移,判断i若小于数组长度则因新出现了一个数则,将该新的数赋值给num[++k]
重复2.1,2.2,2.3直到i,j大于数组长度
因为刚开始的时候把nums[k++]=n[j],结果一直不通过,不通过的例子是输入的是[1,2,2],错误输出了[2,2,2],调了好长时间
不能想当然啊,粗心大意
2、如果数组的长度大于2,设置两个变量初值i=0,j=1,k=0;
2.1如果num[i]=num[j],则只需把num[++k]=n[j]一次
2.2如果num[i]=num[j++],则把较大的j一直后移直到出现新的数字或者j的值大于数组长度,
2.3将j的值赋给i,并将j后移,判断i若小于数组长度则因新出现了一个数则,将该新的数赋值给num[++k]
重复2.1,2.2,2.3直到i,j大于数组长度
public class Solution { public int removeDuplicates(int[] nums) { int len=nums.length; int i=0,k=0,j=1; if(len<=2) return len; else { nums[k]=nums[i]; while(i<len&&j<len){ if(nums[i]==nums[j]) { nums[++k]=nums[i]; } while(i<len&&j<len&&nums[i]==nums[j]) { j++; } i=j; j++; if(i<len) { nums[++k]=nums[i]; } else break; } return k+1; } } }总结,要注意是k++与++k的不同,若k=0,则表达式k++的值为0,k的值变为1;表达式++k的值为1,k的值为1
因为刚开始的时候把nums[k++]=n[j],结果一直不通过,不通过的例子是输入的是[1,2,2],错误输出了[2,2,2],调了好长时间
不能想当然啊,粗心大意
相关文章推荐
- 前端开发值得推荐的各种资源
- C语言时间处理
- 导航控制器(NavigationController)中设置标题的常用方法
- C语言中函数的妙用
- yii2简述一对一数据表关联
- PRML5-神经网络(1)
- Java中类,继承,方法重写和自动转型的理论感悟
- [HAOI2011][BZOJ2298] problem a
- Combination Sum
- 字体
- 史上最完整的省市县/区数据 三级联动数据库
- 每天小技(2015/07/13)
- 做安全一些基本原则
- 用户注册验证
- JQuery——日期拾取器
- IOS UI设计模式 - 分页
- Android 事件分发实践(一),解决ScrollView嵌套ListView滑动的问题
- 八大排序算法
- #笔记#圣思园 JavaWeb 第34讲——Session深度解析
- java Properties类的用法