leetcode_数组_相关内容2(

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

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 &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;   
    }
};


你可能感兴趣的:(leetcode)