贪心算法day(1)

1.将数组和减半的最少操作次数

链接:. - 力扣(LeetCode)

思路:创建大跟堆将最大的数进行减半

注意点:double t = queue.poll()会将queue队列数字减少一个后再除以2,queue.offer(queue.poll()/ 2)

复制代码
class Solution {
     public int halveArray(int[] nums) {
        //如何建立大根堆??
        PriorityQueue<Double> queue = new PriorityQueue<>((a,b)->b.compareTo(a));
      double sum = 0.0;
        int count = 0;
       for(int x:nums){
           queue.offer((double) x);
           sum+=x;
       }
      sum /= 2.0;

        while(sum > 0){
            
         double t = queue.poll() / 2.0;
            sum -= t;
            count++;
            queue.offer(t);
        }
        return count;

    }
}

2.最大数

链接:. - 力扣(LeetCode)

主要问题:如何将数字改为字符串以及排序

复制代码
class Solution {
    public static String largestNumber(int[] nums) {
        //把数字转化成字符串 把两个字符串拼接在一起比较字符串的字典序
        //ab > ba a在前b在后 ab < ba b在前a在后

        //转化字符串
        int n = nums.length;
        String[] str = new String[n];
        for (int i = 0; i < n; i++) {
            str[i] = ""+nums[i];
        }
        //排序
        Arrays.sort(str,(a,b)->{
            return (b+a).compareTo(a+b);
        });
       //提取结果
        StringBuffer ret = new StringBuffer();
       for(String x: str){
           ret.append(x);
       }
       if(ret.charAt(0) == '0'){
           return "0";
       }
       return ret.toString();
    }
}

3.摆动序列

链接:. - 力扣(LeetCode)

思路:把数子画成波峰波谷 左右端点以及波峰波谷就是我们要找的最大摆序列

问题:如何表示波峰波谷以及什么情况下添加最大摆动序列

复制代码
class Solution {
   public int wiggleMaxLength(int[] nums) {
        int n = nums.length;
         if(n < 2){
             return n;
         }
         int left = 0;
         int count = 0;
        for (int i = 0; i < n - 1; i++) {
            int right = nums[i+1] - nums[i];
            if(right == 0) continue;
            if(left * right <= 0){
                count++;
            }
            left = right;
        }
        return count + 1;

   }
}
相关推荐
欧阳小猜2 小时前
深度学习②【优化算法(重点!)、数据获取与模型训练全解析】
人工智能·深度学习·算法
小欣加油2 小时前
leetcode 904 水果成篮
c++·算法·leetcode
有Li2 小时前
CXR-LT 2024:一场关于基于胸部X线的长尾、多标签和零样本疾病分类的MICCAI挑战赛|文献速递-深度学习人工智能医疗图像
论文阅读·人工智能·算法·医学生
君万2 小时前
【LeetCode每日一题】56. 合并区间
算法·leetcode·golang
墩墩同学2 小时前
【LeetCode题解】LeetCode 287. 寻找重复数
算法·leetcode·二分查找
小南家的青蛙3 小时前
LeetCode第55题 - 跳跃游戏
算法·leetcode·职场和发展
啊我不会诶3 小时前
CF每日4题(1500-1700)
c++·学习·算法
shuououo4 小时前
集成算法学习笔记
笔记·学习·算法
呼啸长风5 小时前
漫谈散列函数
算法
NAGNIP5 小时前
彻底搞懂 RoPE:位置编码的新范式
算法