Java刷题总结——贪心算法篇


376. 摆动序列7

        通过山坡法判断有几个峰值,即

        峰值为:

  1. prediff > 0&& curdiff < 0 或者

prediff < 0&& curdiff > 0

本题要考虑三种情况:

        (1)上下坡中有平坡 即:允许prediff = 0

        (2)数组首尾两端

        (3)单调坡中有平坡

53. 最大子数组和

        遇到负数时不跳过,当count小于0时才重新置零计数

45. 跳跃游戏 II

        如果能走到,那步数加1


if(maxSize >= nums.length - 1){
                step++;
                return step;
            }
//如果能走到边界了,那必须向前走一步
            if(i == curSize){
                step++;
                curSize = maxSize;
            }

1005. K 次取反后最大化的数组和

1.思路

        按绝对值排序,负数全变为正数,k还剩的话找最小的正数一直薅

2.代码编写

(1)绝对值排序

nums = IntStream.of(nums)

 .boxed()

 .sorted((o1, o2) -> Math.abs(o2) -Math.abs(o1)) //绝对值大的放在前面

 .mapToInt(Integer::intValue).

toArray();
  •         创建一个int型的输入流stream<Integer> 是Integer类型的流;boxed的作用就是将int类型的stream转成了Integer类型的Stream;toArray把map<Integer>集合转成int类型,再转换成array数组。

(2)数组累加

  • Arrays.stream(nums).sum();

  • 860. 柠檬水找零

  •         分5、10、20的情况,当20时使用贪心:

         (1)先用10块,再用5块

        (2)用3张5块

        (3)其他情况为false 

406. 根据身高重建队列

    升序排完队以后,插入过程使用链表:

for (int[] p : people) {

            que.add(p[1],p);  

        }

//Linkedlist.add(index, value),会将value插入到指定index裡。

  比如升序后:

  [7,0],[7,1],[6,1],[5,0]…每一个都是p[]

  1. [7,0]放在p[1]=0
  2. [7,1]放在p[1]=1
  3. [6,1]放在p[1]=1,即:

Queue = [7,0],[6,1],[7,1]

    4.把[5,0]放在p[1]=0,即:

Queue = [5,0],[7,0],[6,1],[7,1]…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值