文章目录
- 最近也在做LeetCode的题,其中有一道题是删除排序数组中的重复项
- 里面有一句话说:为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
- 在我的理解是:在这个方法调用中,内存保存的数组,会被方法中的直接改变,而此引用非引用。
- 可以看代码
package com.study.simple;
import java.util.HashSet;
import java.util.Set;
public class 删除排序数组中的重复项 {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
public int removeDuplicates2(int[] nums) {
Set<Integer> integers = new HashSet<>();
for (int i=0;i <nums.length;i++){
integers.add(nums[i]);
}
return integers.size();
}
public static void main(String[] args) {
删除排序数组中的重复项 aa = new 删除排序数组中的重复项();
int []nums =new int[]{1,1,2};
int[] temp = nums;
for (int i =0; i< nums.length;i++){
System.out.printf("%s ",nums[i]);
}
int a = aa.removeDuplicates(nums);
System.out.println();
for (int i=0; i< a;i++){
System.out.printf("%s ",nums[i]);
}
System.out.println();
for (int i =0; i< temp.length;i++){
System.out.printf("%s ",temp[i]);
}
System.out.println();
System.out.println(a);
System.out.println();
System.out.println(aa.removeDuplicates2(nums));
}
}
//运行后的结果
1 1 2
1 2
1 2 2
2
2
- 第一个方法,我重新定义一个数组 ,将原数组赋值给这个数组,,结果当执行完方法之后,发现得到的结果,与执行的方法产生后的数组,是一致的,然后就可以想当,这个方法是改变了数组的本来定义。
- 第二种的方法,是用Set集合去实现去除重复的元素,虽然得到是数组去重后的大小,但是题是返回数组,所以,这个方法不能去实现。
- 所以这也考验了审题的结果。