![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leecode
幸幸有狗
这个作者很懒,什么都没留下…
展开
-
动态规划简单的四步骤
//第一步确定状态:假设就是想要求得最后的amount是11,则要算得最后一枚硬币面值为j,则(11-j);//第二步转移方程:假设i是要凑成的金额;则f[i]=min{f[i-1]+1,f[i-2]+1,f[i-3]+1}这里算得的是amount;//第三部初始化条件和边界情况:1、首先如果f[i-1]小于0,则都返回正无穷,f[0]=0(算不出来的才要初始化);边界情况a[j]<=i才可以进行计算//第四部计算顺序f[1].....f[a...原创 2021-04-06 16:24:25 · 2445 阅读 · 0 评论 -
<leetcode>34. 在排序数组中查找元素的第一个和最后一个位置
这里r-l+1,是因为两个值的时候,除以2会停在左边,l = mid ,会造成死循环;class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if (nums.empty()) return vector<int>{-1, -1}; ...原创 2021-04-03 21:01:33 · 74 阅读 · 0 评论 -
<leetcode>76最小覆盖字符串(滑动窗口)
题目描述给定两个字符串 S 和 T,求 S 中包含 T 所有字符的最短连续子字符串的长度,同时要求时间复杂度不得超过 O„n”。输入输出样例输入是两个字符串 S 和 T,输出是一个 S 字符串的子串。Input: S = "ADOBECODEBANC", T = "ABC"Output: "BANC"在这个样例中, S 中同时包含一个 A、一个 B、一个 C 的最短子字符串是“BANC”。题解本题使用滑动窗口求解,即两个指针 l 和 r 都是从最左端向最右端移动,且...原创 2021-04-03 13:24:08 · 271 阅读 · 0 评论 -
<leetcode>142 环形链表
题目描述给定一个链表,如果有环路,找出环路的开始点。3.5 滑动窗口 – 11/143 –输入输出样例输入是一个链表,输出是链表的一个节点。如果没有环路,返回一个空指针。图 3.1: 题目 142 - 输入样例在这个样例中,值为 2 的节点即为环路的开始点。如果没有特殊说明, LeetCode 采用如下的数据结构表示链表。struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), n...原创 2021-04-03 10:34:43 · 215 阅读 · 0 评论 -
<leetcode> 88 合并有序数组
题目描述给定两个有序数组,把两个数组合并为一个。输入输出样例输入是两个数组和它们分别的长度 m 和 n。其中第一个数组的长度被延长至 m + n,多出的n 位被 0 填补。题目要求把第二个数组归并到第一个数组上,不需要开辟额外空间。Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3Output: nums1 = [1,2,2,3,5,6]题解因为这两个数组已经排好序,我们可以把两个指针...原创 2021-04-03 09:47:46 · 106 阅读 · 0 评论 -
<leetcode>167两数之和
3.1 算法解释双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。对于 C++ 语言,指针还可以玩出很多新的花样。一些常见的关于指针的操作如下。 指针与常量int x;int * p1 = &x...原创 2021-04-03 09:11:33 · 83 阅读 · 0 评论 -
<leetcode> 简单的冒泡排序算法
#include<iostream>#include<vector>using namespace std;void printArray(vector<int>&v)//用来打印排序的函数{ for(int i =0;i<v.size();i++) { cout<<" "<<v[i]; }}void bubble_sort(vector<int>&nu...原创 2021-04-03 08:35:27 · 127 阅读 · 0 评论 -
<leetcode>快速排序算法
#include<iostream>#include<vector>using namespace std;void printVector(vector<int>& v) {for (v...原创 2021-04-02 21:39:23 · 114 阅读 · 0 评论 -
<leecode> 435 无重叠区间
[](int x){return x %3 == 0;}//这与f3()的函数定义很像:bool f3(int x){return x % 3 == 0;}题解求最少的移除区间个数,等价于尽量多保留不重叠的区间。在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间。因此,我们采取的贪心策略为,优先保留结尾小且不相交的区间。具体实现方法为,先把区间按照结尾的大小进行增序排序,每次选择结尾最小且和前一个选...原创 2021-04-02 20:19:19 · 92 阅读 · 0 评论 -
135 分发糖果
题解 做完了题目 455,你会不会认为存在比较关系的贪心策略一定需要排序或是选择?虽然这一道题也是运用贪心策略,但我们只需要简单的两次遍历即可:把所有孩子的糖果数初始化为 1;先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。通过这两次遍历,分配的糖果就可以满足题目要求了。这里的贪心策略即为,在每次遍..原创 2021-04-02 18:55:48 · 62 阅读 · 0 评论 -
455 分饼干
2.1 算法解释顾名思义, 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。举一个最简单的例子:小明和小王喜欢吃苹果,小明可以吃五个,小王可以吃三个。已知苹果园里有吃不完的苹果,求小明和小王一共最多吃多少个苹果。在这个例子中,我们可以选用的贪心策略为,每个人吃自己能吃的最多数量的苹果,这在每个人身上都是局部最优的。又因为全局结果是局部结果的简单求和,且局部结果互不相干,因此局部最优的策略也同样是全局最优的策略。2.2 分配问题455. Assi原创 2021-04-02 18:13:00 · 123 阅读 · 0 评论 -
【刷题】leecode 997.有序数组的平方
classSolution{public:vector<int>sortedSquares(vector<int>&nums){for(inti=0;i<nums.size();i++){nums[i]*=nums[i];}for(inti=0;i&...原创 2021-03-27 20:44:06 · 133 阅读 · 0 评论