题目概览给你一个数组nums和一个值val你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k要通过此题您需要执行以下操作更改nums数组使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。返回k。用户评测评测机将使用以下代码测试您的解决方案int[] nums [...]; // 输入数组 int val ...; // 要移除的值 int[] expectedNums [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。 int k removeElement(nums, val); // 调用你的实现 assert k expectedNums.length; sort(nums, 0, k); // 排序 nums 的前 k 个元素 for (int i 0; i k; i) { assert nums[i] expectedNums[i]; }如果所有的断言都通过你的解决方案将会通过。示例 1输入nums [3,2,2,3], val 3输出2, nums [2,2,_,_]解释你的函数应该返回 k 2, 并且 nums中的前两个元素均为 2。 你在返回的 k 个元素之外留下了什么并不重要因此它们并不计入评测。示例 2输入nums [0,1,2,2,3,0,4,2], val 2输出5, nums [0,1,4,0,3,_,_,_]解释你的函数应该返回 k 5并且 nums 中的前五个元素为 0,0,1,3,4。 注意这五个元素可以任意顺序返回。 你在返回的 k 个元素之外留下了什么并不重要因此它们并不计入评测。提示0 nums.length 1000 nums[i] 500 val 100来源27. 移除元素 - 力扣LeetCode解题分析方法双指针定义两个指针 start 和 end 分别指向头尾那么遍历 end 指针若 nums[ end ] val就 end -- 继续找直到找到不等于 val 的 end遍历 start 指针若 nums[ end ] val就和 end 交换位置然后 end--若不等于则 start 继续遍历时间复杂度O(n)空间复杂度O(1)class Solution { public int removeElement(int[] nums, int val) { int start 0, n nums.length, end n - 1; if (n 0) { return 0; } while(start end) { while(start end nums[end] val) { end--; } if (start end) { break; } if (nums[start] val) { nums[start] nums[end]; nums[end--] val; } else { start; } } return nums[start] val ? 0: start 1; } }
JAVA练习360- 移除元素
题目概览给你一个数组nums和一个值val你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k要通过此题您需要执行以下操作更改nums数组使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。返回k。用户评测评测机将使用以下代码测试您的解决方案int[] nums [...]; // 输入数组 int val ...; // 要移除的值 int[] expectedNums [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。 int k removeElement(nums, val); // 调用你的实现 assert k expectedNums.length; sort(nums, 0, k); // 排序 nums 的前 k 个元素 for (int i 0; i k; i) { assert nums[i] expectedNums[i]; }如果所有的断言都通过你的解决方案将会通过。示例 1输入nums [3,2,2,3], val 3输出2, nums [2,2,_,_]解释你的函数应该返回 k 2, 并且 nums中的前两个元素均为 2。 你在返回的 k 个元素之外留下了什么并不重要因此它们并不计入评测。示例 2输入nums [0,1,2,2,3,0,4,2], val 2输出5, nums [0,1,4,0,3,_,_,_]解释你的函数应该返回 k 5并且 nums 中的前五个元素为 0,0,1,3,4。 注意这五个元素可以任意顺序返回。 你在返回的 k 个元素之外留下了什么并不重要因此它们并不计入评测。提示0 nums.length 1000 nums[i] 500 val 100来源27. 移除元素 - 力扣LeetCode解题分析方法双指针定义两个指针 start 和 end 分别指向头尾那么遍历 end 指针若 nums[ end ] val就 end -- 继续找直到找到不等于 val 的 end遍历 start 指针若 nums[ end ] val就和 end 交换位置然后 end--若不等于则 start 继续遍历时间复杂度O(n)空间复杂度O(1)class Solution { public int removeElement(int[] nums, int val) { int start 0, n nums.length, end n - 1; if (n 0) { return 0; } while(start end) { while(start end nums[end] val) { end--; } if (start end) { break; } if (nums[start] val) { nums[start] nums[end]; nums[end--] val; } else { start; } } return nums[start] val ? 0: start 1; } }