![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
给个选择
世界上只有10种人,一种懂二进制,一种不懂。
展开
-
最长上升子序列【leetcode每日一题】【LIS完整优化思路】
写在前面:说来也巧,昨天刚在洛谷上做线性dp,在学习LIS和LCS的优化问题,今天每日一题就出了这道LIS。思路:首先说朴素算法的思路,首先我们要定义一个集合,我们不妨以dp【i】表示数组中以第i位结尾的最长上升子序列的长度,然后从左往右依次迭代就可以了。然后我们需要确定状态,dp【i】表示数组中以第i位结尾的最长上升序列长度,那么它和之前dp【0~i】有什么关系呢?如果nums【i】&...原创 2020-03-14 08:58:12 · 341 阅读 · 0 评论 -
字符串的最大公因子【leetcode每日一题】
其实最开始我的思路是找到str1和str2的最小周期串,然后比较比较两个周期串是否相等,当然如果某个没有周期的话直接返回空串。后来看了一下题解,感觉学到了。。。。啊哈哈哈哈!大致思路如下:1.str1是由m个str组成的,str2是由n个str组成的,那么m+n个str就等于n+m个str,所以只要判断str1+str2==str2+str1就能判断它是否具有最大公因子.2.如果第一步满...原创 2020-03-12 07:51:55 · 279 阅读 · 0 评论 -
将数组分成和相等的三个部分【leetcode每日一题】
思路:1.首先数组里面的数小于三个,直接返回false;2.对数组里面的数求和,和不是3的整数倍,直接返回false;3.从左往右遍历,如果s为和的1/3,就让cnt++,s=0;在第三步考虑到如果你求出来三个区间满足但是最后还有剩余怎么办?没关系,我们接着加,最后只要判断cnt==3并且剩余的几个数的和s等于0就可以了。这个思路非常直接,也不用考虑什么细节,适合新手学习,如果有问题...原创 2020-03-11 08:21:09 · 726 阅读 · 0 评论 -
买卖股票的最佳时机
大致思路如下:从左往右遍历,先用一个变量记录第一个数,然后第二个数开始,如果比记录的数小,就重新赋值,否则就计算这两个数的差值。遍历完一遍之后也就找到了最大的差值。时间复杂度O(n),空间复杂度O(1)代码如下:class Solution {public: int maxProfit(vector<int>& prices) { if(price...原创 2020-03-09 07:30:38 · 137 阅读 · 0 评论 -
零钱兑换【leetcode每日一题】
这道题我刚开始做的时候就觉得是完全背包,每种无限个,且每个都有它的价值,要求在目标价值下求背包中装的个数最小(当然完全背包原型是求得最大,不过都一样)。下面直接上这个方法的代码,算是板子吧:class Solution {public: int coinChange(vector<int>& coins, int amount) { int Max...原创 2020-03-08 10:01:35 · 201 阅读 · 0 评论 -
和为s的连续正数序列【leetcode每日一题】
思路:注意题目上说是连续的一串数。判断连续的一串数是否满足一定的性质可以转化为在一个区间内这些数是否满足一定的性质,那么这道题就可以用我们喜闻乐见的滑动区间来做了。模拟过程:我们可以设一个初始区间,左边界l=1,右边界r=2.在这个区间内,数字之和就是等差数列求和:sum=(l+r)*(r-l+1)/2如果sum<target 那么说明这个区间太小了,就让右边界向右移动扩大区间如果...原创 2020-03-06 08:50:39 · 293 阅读 · 0 评论 -
腐烂的橘子【leetcode每日一题】
这道题算是一个搜索的板子题了。多源的宽度优先搜索。大致思路如下:1.首先遍历统计初始数组中有多少好橘子和坏橘子如果没有坏橘子,返回-1;如果没有好橘子,返回0;2.当好橘子不为0得时候,开始每轮的循环。时间数加1,然后里面所有坏橘子感染周围的好橘子。结束后判断这一轮感染完好橘子数有没有减,没有返回1.有的话且不为0继续下一轮感染,最后就得到了感染时间代码如下:int oranges...原创 2020-03-04 08:32:21 · 267 阅读 · 0 评论 -
合并排序的数组【leetcode每日一题】
这道题并不难,或许每个人都能想到直接赋值给A,然后再排序就完了。然后我刷这道题学到了这种双指针的做法。1.一个指针t1指向A的最后一个数(3),一个指针t2指向B的最后一个数(6);2.如果t1>t2,就把t1插到(t1+t2-1)的位置然后指针t1向前移动一格反之,就把t2插到(t1+t2-1)的位置然后指针t2向前移动一格3.直到t1或者t2有一个指针走完了全部路程。如果是t...原创 2020-03-03 16:33:34 · 241 阅读 · 0 评论