
贪心
Ealiser
这个作者很懒,什么都没留下…
展开
-
LeetCode第611题 有效三角形的个数
算法贪心,二分查找核心思想排序完成后,遍历a+b,找出所有符合a+b>c的值。代码class Solution { public int triangleNumber(int[] nums) { if(nums.length < 3) return 0; Arrays.sort(nums); int res = 0; for(int i = 0;i < nums.length;++i){ .原创 2022-03-29 18:40:41 · 672 阅读 · 0 评论 -
LeetCode第56题 合并区间
算法贪心核心思想这道题类似于第452题 用最少数量的箭引爆气球,不断扩大自己的边界,如果无法扩大就保存至结果中。代码class Solution { public int[][] merge(int[][] intervals) { if(intervals.length == 1) return intervals; Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0])).原创 2022-03-26 12:48:57 · 916 阅读 · 0 评论 -
LeetCode第134题 加油站
算法贪心核心思想这道题第一反应就是计算差值,然后根据最大值进行选取起点。但是这里存在一个问题:选取最高点还是选取最长连续的起点,最后我选择暴力遍历。但是在每次油量为负数时,下次从当前位置的下一点开始。不然会超时。后来看了解析,发现大方向没有错误,问题出在了应该找最小值,如果最小值为小于0,则直接返回-1;不然就返回下一个位置。代码class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { .原创 2022-03-26 10:29:37 · 898 阅读 · 0 评论 -
LeetCode第16题 最接近的三数之和
算法双指针核心思想我们需要实现a1+a2+a3无限逼近target,所以整个公式可以换为sum = a1+a2+a3-target。最终实现sum无限逼近于0。我选择固定a1-target,然后令一个指针从a2开始,另一个指针从尾开始,不断筛选最小值。代码class Solution { public int threeSumClosest(int[] nums, int target) { if(nums.length == 3) return nums[0]+num.原创 2022-03-25 16:01:07 · 1157 阅读 · 0 评论 -
LeetCode第122题 买卖股票的最佳时间II
算法贪心、动态规划核心思想只要挣钱我就买,两两做差,如果大于0,我就买,小于0我就留着。实际上总利润就是所有大于0的差值的和。代码class Solution { public int maxProfit(int[] prices) { int[] temp = new int[prices.length - 1]; int total = 0; for(int i = 1,j = 0;i < prices.length;i++,j.原创 2022-03-24 15:19:32 · 864 阅读 · 0 评论 -
LeetCode第376题 摆动序列
算法贪心也可以用动态规划核心思想我主要采用的是贪心的做法,对于任意开始,如果前一组数是>,那后一组只要是<即可,不是就换下一个数。代码class Solution { public int wiggleMaxLength(int[] nums) { if(nums.length == 1) return 1; int total = 0; int sign = 0; for(int i = 1;i < n.原创 2022-03-24 14:40:16 · 902 阅读 · 0 评论 -
LeetCode第55题 跳跃游戏
算法贪心核心思想根据当前数组a[i]的大小,对当前可以到达的位置(即小于i+a[i])进行遍历,选择一个最大的作为下一步,但是这里注意一点是如果当前的点即便是最大的,但所能到达的范围也在(i+a[i])的范围内。则应该选择另一个点。代码class Solution { public boolean canJump(int[] nums) { if(nums.length == 1) return true; if(nums[0] == 0) return.原创 2022-03-24 12:34:55 · 4395 阅读 · 0 评论 -
LeetCode第402题移掉K位数字
算法单调栈、贪心核心思想第一个数字a直接入栈,其他数字b与已经入栈的数字进行比较,如果b < a,则a出栈,直到①栈为空;②b >= a;③已经删除了k个数字.此外还存在三个特殊情况:①删除的数字少于k,则从末尾删除;②存在零,删掉;③序列为空,返回0.我采用的思路是贪心加递归,从前k个数中选择一个最小的(从这里开始错误,因为不保证在剩下的地方能找到其他小的),然后依次找其他数字。此这种方法还存在一个问题就是递归无法解决0的问题。代码class Solution { .原创 2022-03-23 21:48:33 · 268 阅读 · 0 评论 -
LeetCode第452题 用最少数量的箭引爆气球
算法贪心核心思想整体思路就是不断修改射击的时间,在经过以起点为主的排序后,存在两个前提:前一组points0维必小于下一组points0维,以及同一组0维必小于1维。所以判定条件如下://存在射击窗口期[start,end]//对于数组[x1,y1],[x2,y2],存在如下情况x2 >= y1 -> 更新start=x2,end=y2;x1 >= x2 >= y1 -> 更新start = x2;x1 > x2 > y2 > y1 -&g.原创 2022-03-23 13:39:13 · 468 阅读 · 0 评论