28 数组中出现超过一半得数字
和leetcode中第三题很像得哈希表解法。就是返回得时候需要返回i而不是最大数量maxn需要注意一下,和书上得第二种解法很相近。这段代码得好处在于缩缩减减可以直接把代码缩为14行,看起来就比较高大上了,而且定义得元素非常得少,方便理解。具体如何用数组实现哈希的操作可以看一下leetcode第三题解答。代码如下:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int maxn=0;
int flag[256]={0};
for(int i=0;i<numbers.size();++i){
flag[numbers[i]]++;
}
for(int i=0;i<256;i++){
maxn=max(maxn,flag[i]);
}
if(maxn>numbers.size()/2){
int i=0;
while(flag[i]!=maxn){
i++;
}
return i;
}
return 0;
}
};
29 最小得k个数
嗯,这题写的时候有些投机取巧,直接用了sort函数,然后直接取尾巴上的k个值,话说遍历的时候先插入k个数,然后将后来的数进行比较再替换时间复杂度会第一点,不过代码自然没有sort简洁。话说既然sort都被封装出来了,为啥不用呐?嗯,只能说sort在大小数中的作用不要太大,代码如下:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> answer;
if(input.empty()||k>input.size())
return answer;
sort(input.begin(),input.end());
for(int i=0;i<k;++i)
answer.push_back(input[i]);
return answer;
}
};
话说有段时间没更博客了,主要最近比较忙,且不像前段时间笔试较多,练得也稍微少了点,不过重重之重还是先把论文之类得事情搞定为先吧,毕竟事关毕业,马虎不得。。。所以如果有空 就抽空更吧。嗯还有实习要做,有得忙活了。