1. 169 Majority Element 传送门:https://leetcode.com/problems/majority-element/
大意:求出出现次数最多的数。
题解:少见的官方给出了题解,并提供了多种思路。建议都试一试。传送门:https://leetcode.com/problems/majority-element/solution/
AC代码:
class Solution {
public:
int majorityElement(vector& nums) {
//divide and conquer
int left=0,right=nums.size()-1;
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
2. 75 Sort Colors 传送门:https://leetcode.com/problems/sort-colors/
大意:按照颜色进行分类。排序。
题解:我的思路非常不正规。在discuss里也说了只是plusing meghod。会在下次更新时想出更好的办法。
AC代码:
class Solution {
public:
void sortColors(vector& nums) {
int num1=0,num2=0,num3=0;
int i,j,k;
for(i=0;i
大意:求出子集。
题解:这道题的tag里包含了back-tracking。这一类题都可以用for循环进行dfs来解决,在dfs语句前加入要执行的这次元素,dfs语句后再弹出。
这一次的for循环指明了下一次循环从哪儿开始。
AC代码:
class Solution {
public:
void solve(int index,int cur,vector &res,vector >&ans,vector& num)
{
ans.push_back(res);
for(int i=cur;i > subsets(vector &S) {
vector > ans;
vector res;
//vector num;
sort(S.begin(),S.end());
solve(0,0,res,ans,S);
return ans;
}
};
4. 90 subsets|| https://leetcode.com/problems/subsets-ii/
大意:给出的数组里可能会含有相同的元素,仍然需要生成子集。
题解:这里有两种思路:一种是允许生成含有相同元素的子集,但不加入最终的答案中,需要添加一个判断函数这种方法耗费的时间复杂度较大;
另一种是不允许包含相同的元素。
AC代码:
class Solution {
public:
bool check(vector &s,vector >&ans)
{
for(int k=0;k &res,vector >&ans,vector& num)
{
if(check(res,ans))
ans.push_back(res);
for(int i=cur;i > subsetsWithDup(vector &S) {
vector > ans;
vector res;
//vector num;
sort(S.begin(),S.end());
solve(0,0,res,ans,S);
return ans;
}
};
5. 39 Combination Sum https://leetcode.com/problems/combination-sum/
大意:要求生成的子集之和等于给定的数值。
题解:仍然是用回溯的方法。
AC代码:
class Solution {
public:
void solve(vector& res,vector >& ans,vector& candidates,int cur,int sum,int target)
{
if(sum==target) {ans.push_back(res);return;}
for(int i=cur;i > combinationSum(vector &candidates, int target) {
vector > ans;
vector res;//rest
solve(res,ans,candidates,0,0,target);
return ans;
}
};