移除元素_27_283_26_80
LeetCode_27原题链接:https://leetcode-cn.com/problems/remove-element/
题目描述:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,必须仅使用 O(1) 额外空间并 原地 修改输入数组。
public class removeElement { public static int removeElement(int[] nums, int val) { if(nums == null || nums.length == 0) { return 0; } int i = 0; for(int j = 0; j < nums.length; j++){ if(nums[j] != val){ nums[i] = nums[j]; i++; } } return i; } public static int removeElement2(int[] nums, int val) { int left = 0; int right = nums.length; while (left < right) { if (nums[left] == val) { nums[left] = nums[right - 1]; right--; } else { left++; } } return left; } public static void main(String[] args) { int[] nums = {3,2,2,3}; int val = 3; System.out.println(removeElement(nums, val)); System.out.println(removeElement2(nums, val)); } }
LeetCode_283原题链接:https://leetcode-cn.com/problems/move-zeroes/
题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
public void moveZeroes(int[] nums) { int n = nums.length, left = 0, right = 0; while (right < n) { if (nums[right] != 0) { swap(nums, left, right); left++; } right++; } } public void swap(int[] nums, int left, int right) { int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; } public void moveZeroes2(int[] nums) { int n = nums.length; int t = 0; for(int num: nums) { if(num != 0) { nums[t++] = num; } } while(t < n) { nums[t++] = 0; } }
LeetCode_26原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
题目描述:
给你一个 升序排列 的数组 nums
,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
元素的 相对顺序 应该保持 一致 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
public int removeDuplicates(int[] nums) { int n = nums.length; if (n == 0) { return 0; } int fast = 1, slow = 1; while (fast < n) { // 使用双指针 if (nums[fast] != nums[fast - 1]) { nums[slow] = nums[fast]; slow++; } fast++; } return slow; }
LeetCode_80原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/
题目描述:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
public int removeDuplicates(int[] nums) { int i = 0; for (int n : nums) { if (i < 2 || n > nums[i-2]) { nums[i++] = n; } } return i; } public int removeDuplicates2(int[] nums) { int n = nums.length; if (n <= 2) { return n; } int slow = 2, fast = 2; while (fast < n) { if (nums[slow - 2] != nums[fast]) { nums[slow] = nums[fast]; slow++; } fast++; } return slow; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本