题目描述:
思路想法:
其实这道题不难,但重要的是建立模块思维。
我们把原数组的每一个坑位当成一个模块,这个模块是我们需要一个一个的去填满的,而且要满足不重复;
另一个模块就是我们手中的袋子,这个袋子里装满了一个有序但重复的可用资源;
我们先把袋子里第一个元素填入第一个坑位,然后袋子里第二元素和刚刚填的元素比较,若相同,直接舍弃,若不同,放入第二个坑位;
就这样,当我们把手中袋子里的元素都用完了,就把原数组去重了;
当然,我们最后还要知道新的数组是多长?这个简单,我们只需要在把元素放入坑位的同时,加一个计数器就行了。
Java 代码:
class Solution {
public int removeDuplicates(int[] nums) {
int temp=1;
int count=0;
int len = nums.length;
for (int i=1;i<len;i++){
// 思路:将空位一个一个填踏实
for (int j=temp;j<len;j++){
if(nums[j] != nums[i-1]){
nums[i]= nums[j]; // 不等便填充
temp=j+1;
count++;
break;
}
else{temp=j+1;}
}
// 提前跳出外层循环
if(temp==len) break;
}
return count+1;
}
}
核心技能:
模块思想,一个保守派,一个跃进派? 其实就是大家说的快慢指针啦,不过我喜欢按自己的理解来--数组中的模块思想。