leetcode_数组_相关内容2(
2015-05-15 19:25
344 查看
1. 169 Majority Element 传送门:https://leetcode.com/problems/majority-element/
大意:求出出现次数最多的数。
题解:少见的官方给出了题解,并提供了多种思路。建议都试一试。传送门:https://leetcode.com/problems/majority-element/solution/
AC代码:
2. 75 Sort Colors 传送门:https://leetcode.com/problems/sort-colors/
大意:按照颜色进行分类。排序。
题解:我的思路非常不正规。在discuss里也说了只是plusing meghod。会在下次更新时想出更好的办法。
AC代码:
3. 78 subsets 传送门:https://leetcode.com/problems/subsets/
大意:求出子集。
题解:这道题的tag里包含了back-tracking。这一类题都可以用for循环进行dfs来解决,在dfs语句前加入要执行的这次元素,dfs语句后再弹出。
这一次的for循环指明了下一次循环从哪儿开始。
AC代码:
4. 90 subsets|| https://leetcode.com/problems/subsets-ii/
大意:给出的数组里可能会含有相同的元素,仍然需要生成子集。
题解:这里有两种思路:一种是允许生成含有相同元素的子集,但不加入最终的答案中,需要添加一个判断函数这种方法耗费的时间复杂度较大;
另一种是不允许包含相同的元素。
AC代码:
大意:要求生成的子集之和等于给定的数值。
题解:仍然是用回溯的方法。
AC代码:
大意:求出出现次数最多的数。
题解:少见的官方给出了题解,并提供了多种思路。建议都试一试。传送门:https://leetcode.com/problems/majority-element/solution/
AC代码:
class Solution { public: int majorityElement(vector<int>& 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<int>& nums) { int num1=0,num2=0,num3=0; int i,j,k; for(i=0;i<nums.size();i++) { if(nums[i]==0) num1++; else if(nums[i]==1) num2++; else num3++; } //nums.clear(); for(i=0;i<num1;i++) nums[i]=0; for(j=num1;j<(num1+num2);j++) nums[j]=1; for(k=num2+num1;k<(num3+num2+num1);k++) nums[k]=2; } };
3. 78 subsets 传送门:https://leetcode.com/problems/subsets/
大意:求出子集。
题解:这道题的tag里包含了back-tracking。这一类题都可以用for循环进行dfs来解决,在dfs语句前加入要执行的这次元素,dfs语句后再弹出。
这一次的for循环指明了下一次循环从哪儿开始。
AC代码:
class Solution { public: void solve(int index,int cur,vector<int> &res,vector<vector<int> >&ans,vector<int>& num) { ans.push_back(res); for(int i=cur;i<num.size();i++) { res.push_back(num[i]); //index++; solve(index+1,i+1,res,ans,num); res.pop_back(); } } vector<vector<int> > subsets(vector<int> &S) { vector<vector<int> > ans; vector<int> res; //vector<int> 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<int> &s,vector<vector<int> >&ans) { for(int k=0;k<ans.size();k++) if(ans[k]==s) return false; return true; } void solve(int index,int cur,vector<int> &res,vector<vector<int> >&ans,vector<int>& num) { if(check(res,ans)) ans.push_back(res); for(int i=cur;i<num.size();i++) { res.push_back(num[i]); //index++; solve(index+1,i+1,res,ans,num); res.pop_back(); } } vector<vector<int> > subsetsWithDup(vector<int> &S) { vector<vector<int> > ans; vector<int> res; //vector<int> 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<int>& res,vector<vector<int> >& ans,vector<int>& candidates,int cur,int sum,int target) { if(sum==target) {ans.push_back(res);return;} for(int i=cur;i<candidates.size();i++) { if(sum+candidates[i]<=target) { res.push_back(candidates[i]); solve(res,ans,candidates,i,sum+candidates[i],target); res.pop_back(); } } } vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > ans; vector<int> res;//rest solve(res,ans,candidates,0,0,target); return ans; } };
相关文章推荐
- leetcode_数组_相关内容_1(48-66-88-118-119)
- C语言数组相关内容
- php数组函数相关内容
- [leetcode] 根据String数组构造TreeNode,用于LeetCode树结构相关的测试用例
- C语言如何输出数组内容以及指针相关知识
- leetcode_树_相关内容
- [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数
- 交换两数组内容 1.0
- PSP自制系统3.xxOE相关内容
- jQuery实现页内查找相关内容
- leetCode 283. Move Zeroes 数组
- 一个父亲和儿子的故事 并查集相关内容
- php 读取txt文件中的内容,转换成数组
- 【系统相关】打开WORD2016就弹出:您正试图运行的函数包含有宏或需要宏语言支持的内容...
- Http协议的流程以及相关内容(1.0与1.1的区别)
- LeetCode 问题难度,面试出现频率及问题相关数据结构和算法
- [LeetCode] 数组的最长连续数, O(n)解法
- 关于HTTP协议的相关内容
- 数组相关运算
- 《算法竞赛入门经典——训练指南》第一章相关内容