leetcode每日刷题计划-简单篇day4

腰酸腿疼肝数模

被教育说代码风格像是小学生而且有点冗余

QAQ之前面试官好像也说过orz努力改努力改

今天把前两天跳过的vector给简单看了一下补上了

Num 14 最长公共前缀 Longest Common Prefix

string在处理过程中有几个问题

第一string是const指针对应的

第二min函数比较要求类型完全相同(a,s.length())这种不能直接比较,要(a,(int)s.length())

另外需要注意的是,一个一个加字符最后加''在数据比较大会出现stack-buffer-overflow,默认分配并没有那么多,相邻内存可能是被占用的、

https://blog.csdn.net/cny901111/article/details/7771668

可以使用substr,但这个需要头文件string

也可以string g(s,0,len)

s是被复制的字符串,0代表起始位置,len代表长度(是长度不是最后一个下标哦!)

还有注意修改过程中len=min(len,s1.length())

不然的话s1不够长可能会溢出

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int num=strs.capacity();
        if(num==0) return "";
        if(num==1) return strs.at(0);
        string s=strs.at(0);
        int len=s.length();
        for(int i=1;i<num;i++)
        {
            string s1=strs.at(i);
            len=min(len,(int)s1.length());
            for(int j=0;j<min(len,(int)s1.length());j++)
            {
                if(s[j]!=s1[j])
                {
                    len=j;
                    break;
                }
            }
        }
        string g(s,0,len);
        return g;
    }
};
View Code

Num 26 删除排序数组中的重复项 Remove Duplicates from Sorted Array

边写边想O(1),比自己暴力搬动确实要好一些的,反复提示后面不用管,那么在len修改的过程中直接把数字带过去就好了

vector a 里面元素个数 a.capacity()

可以想象成数组,直接a[i],也可以用a.at(i)

注意一下呀这个有可能是空的,学会考虑边界条件 a.empty(),判断是否为空

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.empty()) return 0;
        int now=nums[0];
        int len=1;
        for(int i=1;i<nums.capacity();i++)
        {
            if(nums[i]>now)
            {
                now=nums[i];
                nums[len++]=now;
            }
        }
        return len;
    }
};
View Code
时间才能证明一切,选好了就尽力去做吧!
原文地址:https://www.cnblogs.com/tingxilin/p/10703536.html