网站的费用可以做无形资产,扫码点餐小程序怎么制作,html网页设计作业源代码,网站浏览历史能恢复吗怎么设置给你一个 升序排列 的数组 nums #xff0c;请你 原地 删除重复出现的元素#xff0c;使每个元素 只出现一次 #xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k #xff0c;你需要做…给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k 你需要做以下事情确保你的题解可以被通过
更改数组 nums 使 nums 的前 k 个元素包含唯一元素并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 判题标准:
系统会用下面的代码来测试你的题解:
int[] nums […]; // 输入数组 int[] expectedNums […]; // 长度正确的期望答案
int k removeDuplicates(nums); // 调用
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,_] 解释函数应该返回新的长度 2 并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。 示例 2
输入nums [0,0,1,1,1,2,2,3,3,4] 输出5, nums [0,1,2,3,4] 解释函数应该返回新的长度 5 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
提示
1 nums.length 3 * 104 -104 nums[i] 104 nums 已按 升序 排列
第一种
public int removeDuplicates(int[] nums) {
//获取数组 nums 的长度如果长度为0直接返回0因为数组中没有重复元素int n nums.length;if (n 0){return 0;}
//定义两个指针 fast 和 slow初始值都为1。int fast 1;int slow 1;
//通过遍历数组比较 fast 指针和 fast-1 指针对应的元素是否相等。
//如果不相等说明找到了一个新的不重复元素将其赋值给 slow 指针对应的位置并将 slow 指针向前移动一位。
//无论相等与否fast 指针都应向前移动一位。while(fastn){if(nums[fast] ! nums[fast-1]){nums[slow] nums[fast];slow; }fast;}//返回 slow 的值即去除重复元素后数组的长度。return slow;
}第二种方式
public int removeDuplicates(int[] nums) {
//获取数组 nums 的长度如果长度为0直接返回0因为数组中没有重复元素int n nums.length;if (n 0){return 0;}int p 0; //初始化指针p为0int q 1; // 初始化指针q为1while(qn){ // 当指针q小于n时执行循环if(nums[p] ! nums[q]){ // 如果nums中指针p和指针q的元素不相等nums[p1] nums[q]; // 将nums中指针q的元素赋值给指针p1的位置p; // 指针p向右移动一位}q; // 指针q向右移动一位}return p1; // 返回最终不重复的元素的个数
}