day1-线性表

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">从简单的开始,先养成习惯。考虑要不要安排刚起床就做两道,这样时间比较固定,而且开了头的事情潜意识里会更愿意完成它。</span>

Remove Duplicates from Sorted Array

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0;
        int prei = 0, last = nums[0];
        
        for (int i = 1; i<nums.size(); ++i) {
            if (nums[i]!=last) {
                nums[++prei] = last = nums[i];
            }
        }
        return ++prei;
    }
};
很基本,不过写的时候在考虑styling的选择,慢慢modify吧

看到第二种写法, 简单但更慢:

    int removeDuplicates(vector<int>& nums) {
        return distance( nums.begin(), unique(nums.begin(), nums.end()) );
    }
unique returns end() of the modified array ,新array是consecutive duplicates被处理去除后得到。


Remove Duplicates from Sorted Array II
第一反应是加上一个counter数出现几次,

    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0;
        int last = nums[0];
        int prei = 0, ct = 1, allowed = 2;
        
        for (int i=1; i<nums.size(); ++i){
            if (last!=nums[i]){
                nums[++prei] = last = nums[i];
                ct = 1;
            } else if (ct < allowed){
                nums[++prei] = nums[i];
                ++ct;
            }
        }
        return ++prei;
    }
为了扩展性,加入变量allowed。不过看来是很慢的做法,考虑一下利用sorted性质来优化。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值