本题目只是针对题目要求,只是其中一种解决方案,如有更好的解法请留言讨论
如果大家仔细观察,格雷码其实是有规律的,他一定会出现2的n次幂,并且除去首位和前n-1位是镜像对称的。
class GrayCode {
public:
vector<string> getGray(int n) {
// write code here
if(n==1)
{
vector<string> v(2);
v[0]="0";
v[1]="1";
return v;
}
vector<string> tmp=getGray(n-1);
vector<string> v(2*tmp.size());
for(unsigned int i=0;i<tmp.size();i++)
{
v[i]="0"+tmp[i];
}
for(unsigned int i=tmp.size();i<v.size();i++)
{
v[i]="1"+tmp[v.size()-i-1];
}
return v;
}
};
本题的性质是一个数出现的次数超过数组一般的题目变形
Talk is cheap, show me the code
class Gift {
public:
int getValue(vector<int> gifts, int n) {
// write code here
int len=gifts.size();
if(len<=1||n<=1)return 0;
int money=gifts[0];int times=1;
for(int i=1;i<len;i++)
{
if(gifts[i]==money)times++;
else
{
times--;
if(times==0)
{
money=gifts[i];
times=1;
}
}
}
times=0;
for(int i=0;i<len;i++)
{
if(money==gifts[i])times++;
}
return times*2>len?money:0;
}
};