腰酸腿疼肝数模
被教育说代码风格像是小学生而且有点冗余
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; } };
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; } };