问题重复:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1,2
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0,1,2,3,4
解决方案:
设定一个计数变量number表示新出现的数,对数组进行遍历比较nums[i] nums[number]即可
public class removeDuplicates {
//方法一为笔者自己编写
public int removeDuplicates_solution(int[] nums) {
int new_len = 1;
int location = 0;
for (int i = 0; i < nums.length; i++) {
int temp = 0;
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] == nums[j]) {
temp = 1;
location = j;
}
if (nums[i] != nums[j] && nums[i] < nums[j]){
nums[i + temp] = nums[j];
new_len++;
temp = 0;
location = j;
break;
}
}
if (nums[nums.length-1] == nums[location]){
break;
}
}
for (int k = 0; k < new_len; k++) {
System.out.println(nums[k]);
}
return new_len;
}
//方法2为网上优秀答案
public int solution(int[] nums){
int number = 0;
for (int i=0; i<nums.length; i++){
if (nums[i] != nums[number]){
number++;
nums[number] = nums[i];
}
}
number++;
for (int i=0; i<number; i++){
System.out.println(nums[i]);
}
return number;
}
public static void main(String[] args){
removeDuplicates test = new removeDuplicates();
int[] array = new int[]{0,0,1,1,1,2,2};
int[] array2 = new int[]{0,0,1,1,1,2,2};
int len = test.removeDuplicates_solution(array);
System.out.println("len = "+len);
System.out.println();
int len2 = test.solution(array2);
System.out.println("len2 = "+len2);
}
}
心得体会:
看了答案发现很简单,我自己写复杂了,菜菜菜