删除有序数组中的重复项

  1. 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致
  2. Letcode 26

    保证数组有序

  3. 保序操作,我们采用过滤器的思想来做

    1. class Solution {
    2. public int removeDuplicates(int[] nums) {
    3. int index = 0;
    4. for(int i = 0; i < nums.length; i++) {
    5. if() {
    6. //要这个数据
    7. nums[index] = nums[i];
    8. index++;
    9. }
    10. }
    11. return index;
    12. }
    13. }

    Code

    1. class Solution {
    2. public int removeDuplicates(int[] nums) {
    3. int index = 0;
    4. for(int i = 0; i < nums.length; i++) {
    5. //如果是开头的边界,则要这个数
    6. //如果是第二个数和前面的数,则判断是否相等
    7. if(i == 0 || nums[i] != nums[i-1]) {
    8. nums[index] = nums[i];
    9. index++;
    10. }
    11. }
    12. return index;
    13. }
    14. }

    移动零

  4. 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

  5. Leetcode 283

    Code

    1. class Solution {
    2. public void moveZeroes(int[] nums) {
    3. int index = 0;
    4. for(int i = 0; i<nums.length; i++) {
    5. if(nums[i] != 0) {
    6. nums[index] = nums[i];
    7. index++;
    8. }
    9. }
    10. //补0
    11. while(index < nums.length) {
    12. nums[index] = 0;
    13. index++;
    14. }
    15. }
    16. }

    合并有序数组

  6. 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

  7. 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
  8. Leetcode 88

    Code

    1. class Solution {
    2. public void merge(int[] nums1, int m, int[] nums2, int n) {
    3. int i = m -1;
    4. int j = n -1;
    5. for(int k = m+n-1; k >=0;k--) {
    6. //什么时候要nums1[i]?j出界 或者 i > j; 倒序 要大的数
    7. if(j < 0 || (i >= 0 && nums1[i] >= nums2[j])) {
    8. nums1[k] = nums1[i];
    9. i--;
    10. } else {
    11. nums1[k] = nums2[j];
    12. j--;
    13. }
    14. }
    15. }
    16. }