问题描述
- leetCode上Easy级别题目求解
-
题目:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array A = [1,1,2],
Your function should return length = 2, and A is now [1,2].
大概意思就是去掉一个有序数组重复的元素。
我按照网上的答案运行了下,发现结果不对啊?下面是代码,求解惑
public class Solution {
public static int removeDuplicate(int[] nums){if(nums.length == 0 || nums.length == 1) { return nums.length; } int index=0, i=1; while(i<nums.length) { if(nums[index] == nums[i]) { i++; }else { nums[++index] = nums[i]; i++; } } return ++index; } public static void main(String[] args){ int[] nums = new int[]{1, 1, 2}; System.out.println("---------------"); int length = removeDuplicate(nums); System.out.println(length); System.out.println(Arrays.toString(nums)); }
}
运行结果为:
---------------
2
[1, 2, 2]
但是按照题目的要求,数组A不是应该变成[1,2]了么?求大神分析下吧,C币实在不多,求帮忙。
解决方案
我的理解,要么程序错了,要么是你对题目的理解错了
这个程序没有截断数组或者开辟新数组的功能
并且它返回结果的长度,所以我的理解这么做就是对的。
你最后System.out.println(Arrays.toString(nums));输出不对,应该是
for (int i = 0; i < length; i++) System.out.println(nums[i] + " ");
解决方案二:
如果返回的数组没有多余的元素,再返回长度就是多余。
时间: 2024-09-19 02:27:06