目录
1.只出现一次的数字
class Solution {
public:
int singleNumber(vector<int>& nums) {
int val = 0;
for(size_t i = 0;i<nums.size();i++)
val^= nums[i];
return val;
}
};
class Solution {
public:
int singleNumber(vector<int>& nums) {
int val = 0;
for(auto e : nums)
val^= e;
return val;
}
};
2.杨辉三角![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy8wLzBkL1Bhc2NhbFRyaWFuZ2xlQW5pbWF0ZWQyLmdpZg)
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>>vv;
//构建结构空间
vv.resize(numRows);
for(size_t i = 0;i<vv.size();++i)
{
vv[i].resize(i+1);
}
for(size_t i = 0;i<vv.size();++i)
{
vv[i][0] = vv[i][vv[i].size()-1] = 1;
}
for(int i = 0; i < vv.size();++i)
{
for(int j = 0; j < vv[i].size();++j)
{
if(vv[i][j]!=1)
vv[i][j] = vv[i-1][j]+vv[i-1][j-1];
}
}
return vv;
}
};
3.电话号码字母组合
长度是几就递归几层
string num_str[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
class Solution {
public:
void _letterCombinations(const string& digits,int i,string str,vector<string>&ret)
{
if(i == digits.size())
{
ret.push_back(str);
return;
}
int num = digits[i] - '0';
const string& letters = num_str[num];//不给引用就是深拷贝,此处不需要深拷贝
for(auto ch : letters)
{
_letterCombinations(digits ,i+1,str+ch,ret);
}
}
vector<string> letterCombinations(string digits) {
vector<string> ret;
if(digits.empty())
return ret;
int i = 0;
string s;
_letterCombinations(digits,i,s,ret);
return ret;
}
};
4.数组中出现次数超过一半的数字
排序法(笔试可用,面试不可用)
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
sort(numbers.begin(),numbers.end());
return numbers[numbers.size()/2];
}
};
记录数字出现的次数
5.连续子数组的最大和
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
vector<int>sum;
sum.resize(array.size()+1);
for(size_t i = 1;i<sum.size();++i)
{
sum[i] = max(sum[i-1]+array[i-1],array[i-1]);
}
int maxSum = sum[1];
for(size_t i = 1;i<sum.size();++i)
{
if(sum[i]>maxSum)
maxSum = sum[i];
}
return maxSum;
}
};