zoukankan      html  css  js  c++  java
  • 【LeetCode】数组移除元素

    链表等复杂数据结构用多了,简单的数组操作也不能遗忘!

    1. 给定一个有序数组,移除所有重复元素并返回新的数组长度,不能分配额外数组的内存空间。

    e.g. 给定输入的数组 = [1,1,2],函数应当返回新长度 = 2,前 2 个元素为 1 和 2。超出新长度所剩下什么元素都无所谓,即新数组可以 = [1,2,2]。

    一开始没读懂 “It doesn't matter what you leave beyond the new length.” 的含义,用了 erase 方法非常复杂,答案比较简略。

     1 int removeDuplicates(vector<int>& nums) {
     2     int count = 0;
     3     for (int i = 1; i < nums.size(); i++) {
     4         if (nums[i] == nums[i - 1])
     5             count++;
     6         else
     7             nums[i - count] = nums[i];
     8     }
     9     return nums.size() - count;
    10 }

    这个更加易懂

    1 int removeDuplicates(vector<int>& nums) {
    2     if (nums.empty())   return 0;
    3     int count = 1;
    4     for (int i = 1; i < nums.size(); i++)
    5         if (nums[i] != nums[i - 1])
    6             nums[count++] = nums[i];
    7 return count; 8 }

    但这样的代码不够“好看”,可以改进为

    1 int removeDuplicates(vector<int>& nums) {
    2     int i = 0;
    3     for (int n : nums)
    4         if (!i || n != nums[i-1])
    5             nums[i++] = n;
    6     return i;
    7 }

    如果不想用 !i 来做第一个元素的判断,代码还能写的更巧妙

    1 int removeDuplicates(vector<int>& nums) {
    2     int i = !nums.empty();
    3     for (int n : nums)
    4         if (n != nums[i-1])
    5             nums[i++] = n;
    6     return i;
    7 }

    int i = !nums.empty(); 这样的写法真的很有趣很有趣,值得学习!

    2. 给定一个数组和一个值,移除数组中所有等于该值的元素,并返回新数组的长度,不能分配额外数组的内存空间。超出新长度所剩余的元素也不考虑。

    使用类似的方法很快解决

    1 int removeElement(vector<int>& nums, int val) {
    2     int i = 0;
    3     for(int n : nums) {
    4         if (n != val)
    5             nums[i++] = n;
    6     }
    7     return i;
    8 }
  • 相关阅读:
    linux命令行打印图片
    linux 命令行打印二维码
    ReactNative DeviceEventEmitter
    python操作Excel的几种方式
    python 爬虫实例(二)
    各种软件安装的URL
    python 爬虫实例(一)
    eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作
    关于Maven项目build时出现No compiler is provided in this environment的处理
    eclipse和maven生成web项目的war包的操作方法
  • 原文地址:https://www.cnblogs.com/wayne793377164/p/7150143.html
Copyright © 2011-2022 走看看