1.題目
2.解決
package com.cl.ch2;
import java.util.Arrays;
public class RemoveDuplicatesTwice {
/**
* 時間複雜度O(n)
* 空間複雜度O(1)
* @param nums
* @return
*/
public int removeDuplicates(int[] nums) {
//數組空
if(nums.length<=0){
return 0;
}
//[0,k]是符合條件的序列,
//count:temp重複的次數記錄
// temp存儲當前進入[0,k]的元素
int k=0,count=1,temp=nums[k];
for(int i=1;i<nums.length;i++){
if(nums[i]==temp){
//重複個數<2,第i個元素應該進入[0,k]的有效序列中
//超過3個重複不符合條件,k不能增加
if(count<2) {
//如果不是相鄰的兩個元素重複(發生過交換),
// 將第i個元素放入k+1的位置
if(i-k!=1){
swap(nums,k+1,i);
}
//直接把第i個元素融入[0,k]
k++;
}
//只要重複的就count++
count++;
}else{
//遇到新的的元素,與k+1的元素交換
swap(nums,++k,i);
//當前進入[0,k]的元素記錄爲temp,重複出現次數爲1
temp=nums[k];
count=1;
}
}
return k+1;
}
private void swap(int[] nums, int k, int i) {
int tem = nums[k];
nums[k]=nums[i];
nums[i]=tem;
}
public static void main(String[] args) {
int[] arr = new int[]{0,0,1,1,1,1,2,3,3};
System.out.println(new RemoveDuplicatesTwice().removeDuplicates(arr));
System.out.println(Arrays.toString(arr));
}
}