当前位置:   article > 正文

Java刷题总结——贪心算法篇_贪心算法入门题java

贪心算法入门题java


376. 摆动序列7

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

        峰值为:

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

prediff < 0&& curdiff > 0

本题要考虑三种情况:

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

        (2)数组首尾两端

        (3)单调坡中有平坡

53. 最大子数组和

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

45. 跳跃游戏 II

        如果能走到,那步数加1

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

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

1.思路

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

2.代码编写

(1)绝对值排序

  1. nums = IntStream.of(nums)
  2. .boxed()
  3. .sorted((o1, o2) -> Math.abs(o2) -Math.abs(o1)) //绝对值大的放在前面
  4. .mapToInt(Integer::intValue).
  5. 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. 根据身高重建队列

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

  1. for (int[] p : people) {
  2. que.add(p[1],p);
  3. }
  4. //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]…

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/680796
推荐阅读
相关标签
  

闽ICP备14008679号