package leetCode.primaryAlgorithm.arrayTest;
public class Test1 {
/**
* 从排序数组中删除重复项: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
* 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
*/
public static int removeDuplicates(int[] nums) {
if (nums==null||nums.length==0) {
return 0;
}
if (nums.length==1) {
return 1;
}
int count = 1;
int key =nums[0];
for (int i = 1; i < nums.length-1; i++) {
if (key!=nums[i]) {
nums[count]=key=nums[i];
count++;
}
}
if (key!=nums[nums.length-1]) {
nums[count]=nums[nums.length-1];
count++;
}
return count;
}
public static void main(String[] args) {
int[] nums = new int[] { 1,1,4};
int count = removeDuplicates(nums);
System.out.println(count);
for (int i = 0; i < count; i++) {
System.out.print(nums[i]);
}
System.out.println();
int[] nums2 = new int[] { 1,2,4,5,6};
count=new Solution().removeDuplicates(nums2);
for (int i = 0; i < count; i++) {
System.out.print(nums2[i]);
}
}
}
//用时最少的方案
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length==0){
return 0;
}
int len = 0;
int num = nums[0];
for (int i=1,len1=nums.length;i<len1; i++) {
if (nums[i]>num){
nums[len]= num;
len++;
num = nums[i];
}
}
nums[len]= nums[nums.length-1];
return len+1;
}
}
1,利用计数器确定换位置
2,分组思想
3,注意最后一组数