问题声明:
给定一个以非缩放顺序排序的整数数组数字,将重复项定为就地,以使每个唯一元素仅出现一次。元素的相对顺序应保持不变。然后返回数字中的唯一元素的数量。
考虑要接受的数字唯一元素的数量,您需要做以下操作:
更改数组数字,以使数字的第一个k元素最初以它们在数字中的顺序包含唯一元素。数字的其余元素并不重要,而且数字的大小。
返回k。
自定义法官:
法官将使用以下代码测试您的解决方案:
int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length
int k = removeDuplicates(nums); // Calls your implementation
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
如果所有断言通过,则您的解决方案将被接受。
示例1:
输入: nums = [1,1,2]
输出: 2,nums = [1,2,_]
说明:您的函数应返回k = 2,NUM的前两个要素分别为1和2。
除了返回的K之外,您留下的东西都没关系(因此它们是强调的)。
示例2:
输入: nums = [0,0,1,1,1,1,2,2,2,3,3,4]
输出: 5,nums = [0,1,2,3,4,,,,,,_]
说明:您的功能应返回k = 5,NUM的前五个要素分别为0、1、2、3和4。
除了返回的K之外,您留下的东西都没关系(因此它们是强调的)。
约束:
- 1 <= nums.length <= 3 * 104
- -1 <= nums [in] = 100 < / / li>
- nums以非调整顺序排序。
解决方案:
class Solution {
public int removeDuplicates(int[] nums) {
int i=0;
for(int j=1;j<nums.length;j++){
if(nums[i]!=nums[j]){
i++;
nums[i]=nums[j];
}
}
return i+1;
}
}