题目:
题目来源:力扣
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
解法一:
遍历数组进行判断,如果找到相等的即进行替换,替换为后边更大的数:
class Solution {
public int removeDuplicates(int[] nums) {
int len=1;
for(int i=0;i<nums.length-1;i++){
if(nums[i+1]<=nums[i]){
int j=i;
while(j+2<nums.length){
if(nums[j+2]>nums[i]){
nums[i+1]=nums[j+2];
len++;
break;
}
j++;
}
if(j==nums.length-2){
return len;
}
}
else{
len++;
}
}
return len;
}
}
结果:
时间复杂度O(n*n)
空间复杂度O(1)
官方解法:
快慢指针法:
因为是有序数组,所以相同元素一定的相邻的。设立两个指针,快指针指向遍历的位置,慢指针是需要填入的不同的元素的位置,最后的慢指针就是新数组的长度。
class Solution {
public int removeDuplicates(int[] nums) {
// 快慢指针法
// int fast=1;
int slow=1;
for(int fast=0;fast<nums.length-1;fast++){
if(nums[fast+1]!=nums[fast]){
nums[slow]=nums[fast+1];
slow++;
}
}
return slow;
}
}
结果:
时间复杂度O(n)
空间复杂度O(1)