1.题目
2.题意
给了一个排好序的数组,要求返回不重复的数组长度length,并使数组前length个为不重复的元素,且不使用额外空间
3.我的解法
int removeDuplicates(int* nums, int numsSize) { /*for循环控制外层的跳转,每次加的不是1,而是key+1,key标识每次重复的长度,这样可以减少遍历次数,不用每个都来一遍 len标识真正长度,再将不重复的nums[i]值赋给nums[len-1]*/ int i=0; int len=0; int j=i+1; int key; for (i=0;i<numsSize;i+=key+1){ j=i+1;key=0; while(nums[j]==nums[i]){ j++; key++; } len++; nums[len-1]=nums[i]; } return len; }
打败100%
4.优秀解法
int removeDuplicates(int* nums, int numsSize) {
int i, j;
for(i=1, j=0 ; i<numsSize; i++){
if(nums[i]!=nums[i-1]){
nums[++j]=nums[i];
}
}
return (numsSize>0 ?j+1:j);
}
思想是一样的,但是优秀解法使用的变量少,简洁优美,应该学习