80.Remove Duplicates from Sorted Array II

    xiaoxiao2021-03-25  77

    80.Remove Duplicates from Sorted Array II

    2017-03-10

    本作品采用“Creative Commons 署名-非商业性使用-相同方式共享 3.0 Unported (cc by-nc-sa)”进行许可。http://creativecommons.org/licenses/by-nc-sa/3.0/所有代码参考:LeetCode题解,151道题完整版

    version1

    每个数和自己之前隔一个的数相比较,是因为每个数最多出现两次。如果和自己之前隔一个的数相同,说明这已经至少是第三次出现这个数了应该跳过 class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.size() <= 2) return nums.size(); int index = 2; for(int i = 2;i < nums.size();i++) { if(nums[i] != nums[index-2]) nums[index++] = nums[i]; } return index; } };

    version2

    每次和前驱及后继比较,如果都相同说明此数出现了超过两次以上,跳过当前数;只有不同时和前驱及后继相同时才是本题合法的数据。很巧妙使用const int n来保存容器的大小是很好的做法,这样不用每次判断循环的时候都调用一次nums.size(),减少了耗时(应该是吧……);且不会因为误操作修改n class Solution { public: int removeDuplicates(vector<int>& nums) { const int n = nums.size(); int index = 0; for(int i = 0;i < n;i++) { if(i > 0 && i < n-1 && nums[i] == nums[i-1] && nums[i] == nums[i+1]) continue; nums[index++] = nums[i]; } return index; } };

    分析:

    时间复杂度都是O(n),额外空间是常数个O(1)v1扩展性更好(比如要求最多出现三次时),但v2比v1要更快一点,why_(:зゝ∠)_

    -FIN-

    转载请注明原文地址: https://ju.6miu.com/read-25803.html

    最新回复(0)