首页 > 其他 > 详细

4.25

时间:2020-04-25 17:26:30      阅读:64      评论:0      收藏:0      [点我收藏+]

1、46全排列——递归

class Solution {
public:
    vector<vector<int>>result;
    void func(vector<int>& nums, vector<int>& current, vector<bool>visit)
    {
        int len = nums.size();
        if (current.size() == len)
        {
            result.push_back(current);
        }
        else
        {
            for (int i = 0; i < len; i++)
            {
                if (visit[i])
                {
                    current.push_back(nums[i]);
                    visit[i] = false;
                    func(nums, current, visit);
                    visit[i] = true;
                    current.pop_back();
                }
            }
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        if (nums.size() == 0)return {};
        if (nums.size() == 1)return { nums };
        int len = nums.size();
        vector<int>current;
        vector<bool>visit(len, true);
        func(nums, current, visit);
        return result;
    }
};

2、21合并两个升序链表——递归

struct ListNode {

	int val;
	ListNode* next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution
{
public:
	ListNode* mergeTwoLists(ListNode* L1, ListNode* L2)
	{
		if (L1 == nullptr)return L2;
		if (L2 == nullptr)return L1;
		if (L1->val <= L2->val)
		{
			L1->next = mergeTwoLists(L1->next, L2);
			return L1;
		}
		else
		{
			L2->next = mergeTwoLists(L1, L2->next);
			return L2;
		}
	}
};
3、26.删除排序数组中的重复项
```cpp
class Solution
{
public:
	int removeDuplicates(vector<int>& nums)
	{
		int ret = nums.size();
		if (ret < 2)return ret;
		int cout = 0;
		for (int i = 0; i < ret; i++)
		{
			if (nums[i] != nums[cout])
			{
				cout++;
				nums[cout] = nums[i];
			}
		}
		nums.resize(cout + 1);
		return cout + 1;
	}
};

4、27.移除元素——原地修改通常考虑重新设置计数指针对数组进行原地覆盖

//1法
class Solution

{
public:
	int removeElement(vector<int>& nums, int val)
	{
		for (int i = 0; i < nums.size(); i++)
		{
			if (nums[i] == val)
			{
				nums.erase(nums.begin() + i);
				i--;
			}
		}
		return nums.size();
	}
};
//2法
class Solution
{
public:

	int removeElement(vector<int>& nums, int val)
	{
		int ret = nums.size();
		int j = 0;
		for (int i = 0; i < ret; i++)
		{
			if (nums[i] != val)
			{
				nums[j] = nums[i];
				j++;
			}
		}
		nums.reserve(j);
		return j;
	}

};

5、35搜素插入位置————有序表的二分法查找位置

class Solution
{
public:
	int searchInsert(vector<int>& nums, int target)
	{
		int low = 0, high = nums.size() - 1;
		if (target < nums[low])return 0;
		if (target > nums[high])return nums.size();
		while ((high - low) != 1) {
			int middle = (low + high) / 2;
			if (nums[middle] < target)low = middle;
			if (nums[middle] > target)high = middle;
			if (nums[middle] == target)return middle;
		}
		if (target == nums[low])return low;
		else return high;
	}

};

6、53最大子序和

//动态规划的方法
class Solution

{

public:

????????int maxSubArray(vector<int>& nums)

????????{

???????????????int len = nums.size();

???????????????vector<int> v(len,0);

???????????????v[0] = nums[0];

???????????????int maxsum = v[0];

???????????????for (int i = 1; i < len; i++)

???????????????{

???????????????????????v[i] = max(v[i - 1] + nums[i], nums[i]);

???????????????????????if (v[i] > maxsum)maxsum = v[i];

???????????????}

???????????????return maxsum;

????????}

};
//贪心法解题
class Solution

{

public:

????????int maxSubArray(vector<int>& nums)

????????{

???????????????int len = nums.size();

???????????????int maxsum = 0, temp = 0;

???????????????for (int i = 0; i < len; i++)

???????????????{

???????????????????????temp += nums[i];

???????????????????????if (temp > maxsum)maxsum = temp;

???????????????????????if (temp < 0)temp = 0;

???????????????}

???????????????return maxsum;

????????}

};


int main()

{

????????vector<int>v1 = { -2,1,-3,4,-1,2,1,-5,4 };

????????Solution c;

????????cout << c.maxSubArray(v1);

????????return 0;

}

4.25

原文:https://www.cnblogs.com/wfplingyun/p/12773985.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!