338 Counting Bits
class Solution {
public:
vector<int> countBits(int num)
{
vector<int> ans;
ans.clear();
ans.resize(num+1);
ans[0]=0;
int p;
if (num<=0) return ans;
for(p=1;p*2<=num;p*=2)
{
for(int i=0,j=p;i<p;(i++,j++))
{
ans[j]=ans[i]+1;
}
}
for(int i=0,j=p;j<=num;(i++,j++))
{
ans[j]=ans[i]+1;
}
return ans;
}
};
347 Top K Frequent Elements
1. 我的
//负数也有可能,比如[-1,-1]
//题意理解错了,不是重复出现k次以上的,而是重复出现的次数按照从大到小排序
//的前k个。。我勒个去。。好久不刷题,理解能力也退化了。。囧了个囧
//所以还是用map吧.
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k)
{
vector<int>ans;
ans.clear();
map<int,int> freHash;
freHash.clear();
int len=nums.size();
for(int i=0;i<len;i++)
{
if (freHash.find(nums[i])!=freHash.end())
freHash[nums[i]]++;
else
freHash[nums[i]]=1;
}
vector<pair<int,int> > result;
for(map<int,int>::iterator i=freHash.begin();i!=freHash.end();i++)
{
result.push_back(make_pair(i->second,i->first ));
}
sort(result.begin(),result.end());
for(int i=0;i<result.size();i++)
{
cout<<result[i].first<<" ";
cout<<result[i].second<<endl;
}
for(int i=result.size()-1,j=0;i>=0 && j<k;i--,j++)
ans.push_back(result[i].second);
return ans;
}
};
2. 讨论里面一个只有6行的神Code
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> my_map;
for_each (begin(nums), end(nums), [&my_map](int i){ my_map[i]++;});
vector<pair<int, int>> pv(begin(my_map), end(my_map));
nth_element(begin(pv), begin(pv)+k, end(pv), [](pair<int, int> a, pair<int, int> b){return a.second > b.second;});
vector<int> result;
transform(begin(pv), begin(pv)+k, back_inserter(result), [](pair<int, int> a){return a.first;});
return result;
}
};
343 Integer Break
小学奥数题,我仍旧记得那个口诀“要三不要二,要二不要一”
先把n整除三
余数为零,则把n都拆成3
余数为1,则拿一个3出来,加上这个余数1,拆成2个2
余数为2,则要这个2
class Solution {
public:
int integerBreak(int n)
{
if (n==2) return 1;
if (n==3) return 2;
int p=n/3;
int remain=n-p*3;
if (remain==0) return pow3(p);
if (remain==1) return pow3(p-1)*4;
if (remain==2) return pow3(p)*2;
return 0;
}
int pow3(int p)
{
int ans=1;
for(int i=1;i<=p;i++)
ans*=3;
return ans;
}
};