• 删除排序数组中的重复项——移除元素


    26. 删除排序数组中的重复项

    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

    不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    示例 1:

    给定数组 nums = [1,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。

    你不需要考虑数组中超出新长度后面的元素。

     1 public class T26 {
     2     public int removeDuplicates(int[] nums) {
     3         int slow = 0, fast = 1;
     4         int count = 1;
     5         while (fast < nums.length) {
     6             if (nums[slow] == nums[fast]) {
     7                 fast++;
     8             } else {
     9                 nums[slow + 1] = nums[fast];
    10                 slow++;
    11                 count++;
    12             }
    13         }
    14         return count;
    15     }
    16 }

    27. 移除元素

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

    不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

    元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    示例 1:

    给定 nums = [3,2,2,3], val = 3,

    函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。

    你不需要考虑数组中超出新长度后面的元素。
    示例 2:

    给定 nums = [0,1,2,2,3,0,4,2], val = 2,

    函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

    注意这五个元素可为任意顺序。

    你不需要考虑数组中超出新长度后面的元素。

     1 public class T27 {
     2     public int removeElement(int[] nums, int val) {
     3         int slow = 0, fast = 0;
     4         int count = 0;
     5         while (fast < nums.length) {
     6             if (nums[fast] == val) {
     7                 fast++;
     8                 count++;
     9             } else {
    10                 nums[slow++] = nums[fast++];
    11             }
    12         }
    13         return nums.length - count;
    14     }
    15 }

    80. 删除排序数组中的重复项 II

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

    不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

    示例 1:

    给定 nums = [1,1,1,2,2,3],
    
    函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。
    
    你不需要考虑数组中超出新长度后面的元素。

    示例 2:

    给定 nums = [0,0,1,1,1,1,2,3,3],
    
    函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。
    
    你不需要考虑数组中超出新长度后面的元素。
    public class T80 {
        public int removeDuplicates(int[] nums) {
            return removeDuplicate(nums, 2);
        }
    
        private int removeDuplicate(int[] nums, int k) {
            int finalLen = 1;
            int count = 1;
            for (int i = 1; i < nums.length; i++) {
                if (nums[i] == nums[i - 1]) {
                    count++;
                } else {
                    count = 1;
                }
                if (count > 2) {
                    nums[finalLen++] = nums[i];
                }
            }
            return finalLen;
        }
    }
    一回生,二回熟
  • 相关阅读:
    mysql 按某属性分组,再统计不同状态 COUNT(IF(FIELD(column_name,str1,str2,str3,...) >= 0, any_value, null)) ... GROUP BY group_column_name
    linux shell相关 & 定时清除日志脚本
    Linux exec source
    mybatis关联查询xml文件简写,复用BaseResultMap和sql
    mysql 组内排序(分组之前排序,如分组取最新时间的数据)
    Spring 拦截器postHandle无法修改Response响应头跨域
    产业数据三级联动,直接通过sql查询,开启二级缓存
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
    jd-gui反编译报错 INTERNAL ERROR
    javax.websocket.server.ServerContainer not available
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12508266.html
Copyright © 2020-2023  润新知