删除有序数组中的重复项
- 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
-
保证数组有序
保序操作,我们采用过滤器的思想来做
class Solution {public int removeDuplicates(int[] nums) {int index = 0;for(int i = 0; i < nums.length; i++) {if() {//要这个数据nums[index] = nums[i];index++;}}return index;}}
Code
class Solution {public int removeDuplicates(int[] nums) {int index = 0;for(int i = 0; i < nums.length; i++) {//如果是开头的边界,则要这个数//如果是第二个数和前面的数,则判断是否相等if(i == 0 || nums[i] != nums[i-1]) {nums[index] = nums[i];index++;}}return index;}}
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
-
Code
class Solution {public void moveZeroes(int[] nums) {int index = 0;for(int i = 0; i<nums.length; i++) {if(nums[i] != 0) {nums[index] = nums[i];index++;}}//补0while(index < nums.length) {nums[index] = 0;index++;}}}
合并有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
- 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
- Leetcode 88
Code
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int i = m -1;int j = n -1;for(int k = m+n-1; k >=0;k--) {//什么时候要nums1[i]?j出界 或者 i > j; 倒序 要大的数if(j < 0 || (i >= 0 && nums1[i] >= nums2[j])) {nums1[k] = nums1[i];i--;} else {nums1[k] = nums2[j];j--;}}}}
