算法刷题—7.11优先队列

简介: ✨今日算法三题1.最后一块石头的重量2.装满杯子需要的最短总时长3.移除石子的最大得分

✨今日算法三题


1.最后一块石头的重量

2.装满杯子需要的最短总时长

3.移除石子的最大得分


文章目录


1.最后一块石头的重量


题目描述

思路详解


这里采用最大堆进行解题。

我们首先考虑,每次拿出两个最大的进行比较,然后大的减去小的重新放入不就完成了嘛。

首先我们创建一个优先队列,遍历重量,放入队列。依次取出重量最大的和第二大的,如果a>b就把a-b重新放入。直到队列里面的元素只剩1个的时候,输出结果。


代码与结果

class Solution {
    public int lastStoneWeight(int[] stones) {
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>((a, b) -> b - a);
        for (int stone : stones) {
            pq.offer(stone);
        }
        while (pq.size() > 1) {
            int a = pq.poll();
            int b = pq.poll();
            if (a > b) {
                pq.offer(a - b);
            }
        }
        return pq.isEmpty() ? 0 : pq.poll();
    }
}

'


2.装满杯子需要的最短总时长


题目描述

思路详解


这个题也是思考了很久。

分两种情况:

  • 第一种:很好想,有一种水特别多,那么答案就是这种水的杯数。
  • 第二种:就是一定可以匹配完成或者匹配到只剩一杯。
    我们只需要先排序,在分情况就好。


代码与结果

class Solution {
    public int fillCups(int[] amount) {
        Arrays.sort(amount);
        int sum=amount[0]+amount[1]+amount[2];
        if(amount[1]+amount[0]>=amount[2]) sum=(sum+1)/2;
        else sum=amount[2];
        return sum;
    }
}

移除石子的最大得分


题目描述

思路详解


本题的思路看起来简单,也不是很好想。

我们先排一下序,两种情况:

  • 第一种:前两个的和小于第三个,这时候我们一直拿最后一堆和任意一堆,结果就是a+b。
  • 第二种: 前两个数的和大于第三个数,那么前两堆一定可以内部抵消一部分。只需总和除以2就好。


代码与结果

class Solution {
  public int maximumScore(int a, int b, int c) {
    int[] arr = new int[] { a, b, c };
    Arrays.sort(arr);
    a = arr[0];
    b = arr[1];
    c = arr[2];
    if (a + b <= c) {
      return a + b;
    } else {
      return (a + b + c) / 2;
    }
  }
}


✨总结


今天的还是有不小难度的,主要考察数学思维和优先队列。加油!!!

相关文章
|
6月前
|
算法 C++
数据结构与算法===优先队列
数据结构与算法===优先队列
数据结构与算法===优先队列
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
2月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
21 0
|
4月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
4月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
47 0
|
6月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
6月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 安全 调度
逆天改命!Python高级数据结构堆(Heap)与优先队列,让你的算法效率飙升至宇宙级!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue实现了堆和优先队列,提供高效算法解决方案。堆用于Dijkstra算法求解最短路径,例如在图论问题中;PriorityQueue则在多线程下载管理中确保高优先级任务优先执行。这两个数据结构提升效率,简化代码,是编程中的强大工具。
61 0
|
6月前
|
算法 Java 调度
Java数据结构与算法:优先队列
Java数据结构与算法:优先队列
|
6月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)