贪心算法
是
baixiaofei567
如果十年前没种树,那最好的时间是现在
展开
-
56. 合并区间
对二维数组进行排序,依据第一位排序,如果返回0就交换位置。排序完后就很简单了,遍历该数组,如果当前区间的最小值小于结果数组最后一位的最大值,那么就得合并!!因为后一个区间的最小值大于等于前一个区间的最小值,那么如果小于前一个区间的最大值,就证明一定区间重复了。就更新结果数组最后一个区间的最大值,最小值不用更新!如果没有重复,就将当前区间加入结果数组,并将j++,j是我们用来记录结果数组最后一位的下标。 class Solution { public: static bool cmp(vector&.原创 2021-01-22 02:32:08 · 166 阅读 · 0 评论 -
665. 非递减数列
简单题可不简单。 和680. 验证回文字符串 Ⅱ很像 不是简单的改当前位或者改前一位就可以,我们要把两种情况都判断一遍,反正只有一次机会,改完之后再遍历,如果还有后面小于前面的直接false。如果改的两个有一个对的就返回true。 class Solution { public: bool helper(vector<int>& nums){ for(int i = 1; i < nums.size();++i){ if(nums[.原创 2021-02-20 01:41:21 · 95 阅读 · 0 评论 -
605. 种花问题
为了不考虑边界问题,在前后插上2个0,这样从1遍历到size-1就行了。如果当前是0,而且前后都是空地,就让n-1。最后返回的不是n==0而是n<=0,因为有可能空地给的很多很多 class Solution { public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { //在左右+0就可以不用判断边界条件了 //碰到0就往前往后数,如果前1位和后1位都不为1就n-1 .原创 2021-02-20 01:36:30 · 68 阅读 · 0 评论 -
121. 买卖股票的最佳时机
差点又写成暴力了,来一个minn记录当天之前的最小值即可,记得更新minn,minn初始化prices[0] class Solution { public: int maxProfit(vector<int>& prices) { //最优解=dp //dp[i]记录从这一天买入后,后面哪天卖出自己赚的最多,如果往后就是暴力了 //所以dp[i]是今天卖出所能最多赚到的钱,用一个minn记录前面的最小值,如果最小值都大于今天的,.原创 2021-01-27 01:44:49 · 66 阅读 · 0 评论 -
406. 根据身高重建队列
巧妙的题,一般要按照两个进行排序的东西,将一个大的放前面,如果相等,就将第二个小的放前面。 class Solution { public: static bool cmp(const vector<int>& v1, const vector<int>& v2){ return v1[0] == v2[0] ? v1[1] < v2[1] : v1[0] > v2[0]; } vector<vector&.原创 2021-01-30 01:10:35 · 107 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
重点是为什么要根据右端点进行从小到大的排序 如果37,45,67,那么按照左端来进行排序,可能45和67根本是不重叠的 如果按照右端45,37,67,也有可能是45,67,37,可以很明确的看出只有两个气球之间有重复区间 区间问题=排序+贪心,第一个气球必须要送一箭,所以res初始值为1,判断当前区间起点和qian是否重叠,如果重叠就continue,因为一箭可以带走它俩。如果不重叠,就让res++,因为新的一组气球最少也要一箭,并更新qian。 class Solution { public: .原创 2021-02-20 01:27:57 · 72 阅读 · 0 评论 -
435. 无重叠区间
区间问题,排序+贪心。不是根据尾排序就是根据前小后大或者前大后小排序。 为什么终点小的排前面,因为终点越大证明留给后面的空间就越小,而我们每次和前一个比,如果有重叠就删除当前区间,所以要把危害比较大的区间放后面。 用一个数字记录前一个区间的终点,如果和当前的起点重叠了,就删除当前的,并让res++,不更新qian,让qian继续和后面的比较。如果不重叠,就用当前区间的终点更新前面那个区间的终点,它是一个新的检查目标。 class Solution { public: static bool cmp.原创 2021-02-20 01:22:36 · 74 阅读 · 0 评论 -
455. 分发饼干
贪心算法,就是先满足胃口小的人,而且是用小饼干去满足它们。所以对饼干和人进行排序,然后遍历饼干,如果当前饼干可以满足这个小孩,就让小孩下标++,并让res++。记得每次都要判断小孩是否越界了。 class Solution { public: //g是孩子,s是饼干 int findContentChildren(vector<int>& g, vector<int>& s) { //先把胃口小的都满足了 //一块饼干.原创 2021-02-19 02:06:36 · 73 阅读 · 0 评论 -
134. 加油站
我们这种人能做出模拟的暴力做法就不错了,从每个加油站走,看看能否绕一圈,如果在中途走回到了原点就return原点。重点是绕一圈的下标要通过%n来实现,这点很重要 class Solution { public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { //贪心算法 //从第i个加油站开到下一个需要消耗cost[i] //遍历...原创 2021-02-08 01:34:15 · 93 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
这道题绝对有中等难度了。可以用状态机dp来做,因为只和前一天的两个状态有关,所以可以状态压缩,压缩到常量级别。最后返回的是最后一天不持有股票的情况。因为最后一天买了就卖不出去,所以肯定不会买,如果之前有,那么最后一天必须要卖掉,所以最后一天肯定无股票。 贪心的应该是想不到的,只要当前这一天比前一天大,就让结果加上当前减去前一天的值 class Solution { public: int maxProfit(vector<int>& prices) { //只..原创 2021-02-07 00:57:28 · 158 阅读 · 0 评论 -
剑指offer——剪绳子C++
数学题一向不会做,有点贪心的思想 class Solution { public: int cutRope(int number) { //m<=n,m>1 if(number<3) return number-1; int a = number/3, b = number%3; if(b==0) return pow(3,a); if(b==1) return pow(3,a-1)*4; .原创 2021-01-08 02:04:16 · 116 阅读 · 0 评论 -
1070 Mooncake (25分)
Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types of fillings and crusts can be found in traditional mooncakes according to the region’s culture. Now given the inventory amounts and the prices of all kinds原创 2020-10-30 01:00:39 · 83 阅读 · 0 评论 -
1038 Recover the Smallest Number (30分)
Given a collection of number segments, you are supposed to recover the smallest number from them. For example, given { 32, 321, 3214, 0229, 87 }, we can recover many numbers such like 32-321-3214-0229-87 or 0229-32-87-321-3214 with respect to different ord原创 2020-10-19 00:52:43 · 125 阅读 · 0 评论 -
1037 Magic Coupon (25分)
#include<iostream> #include<algorithm> using namespace std; int main(){ int n1, n2; int cuppon[100010], product[100010];//int的范围是2^-31到2^31 cin>>n1; for(int i = 0; i < n1; i++){ cin>>cuppon[i]; } c原创 2020-10-19 00:07:27 · 86 阅读 · 0 评论 -
1033 To Fill or Not to Fill (25分)
With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different price. You are asked to car原创 2020-10-17 01:22:07 · 152 阅读 · 0 评论