Java数据结构优先队列实练

 更新时间:2022年07月21日 11:16:18   作者:风铃听雨~  
通常都把队列比喻成排队买东西,大家都很守秩序,先排队的人就先买东西。但是优先队列有所不同,它不遵循先进先出的规则,而是根据队列中元素的优先权,优先权最大的先被取出,这篇文章主要介绍了java优先队列的真题,感兴趣的朋友一起看看吧

最后一块石头的重量

题目描述

思路详解

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

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

首先我们创建一个优先队列,遍历重量,放入队列。依次取出重量最大的和第二大的,如果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();
    }
}

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

题目描述

思路详解

这个题也是思考了很久。

分两种情况:

第一种:很好想,有一种水特别多,那么答案就是这种水的杯数。

第二种:就是一定可以匹配完成或者匹配到只剩一杯。

我们只需要先排序,在分情况就好。

代码与结果

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;
		}
	}
}

到此这篇关于Java数据结构优先队列实练的文章就介绍到这了,更多相关Java优先队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中常用注解的使用合集

    SpringBoot中常用注解的使用合集

    注解 annotation一般是用来定义一个类、属性和一些方法,以便程序能够被编译处理,本文为大家整理了SpringBoot中的常用注解以及它们的使用,需要的可以参考下
    2023-07-07
  • Flowable ReceiveTask使用场景分析

    Flowable ReceiveTask使用场景分析

    这篇文章主要为大家介绍了Flowable ReceiveTask使用场景分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 关于MD5算法原理与常用实现方式

    关于MD5算法原理与常用实现方式

    这篇文章主要介绍了关于MD5算法原理与常用实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • JPA中@ElementCollection使用示例详解

    JPA中@ElementCollection使用示例详解

    在JPA中,@ElementCollection注解主要用于映射集合属性,例如List、Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射,这篇文章主要介绍了JPA中@ElementCollection使用,需要的朋友可以参考下
    2023-11-11
  • 教你用Java实现RSA非对称加密算法

    教你用Java实现RSA非对称加密算法

    今天带各位小伙伴学习怎么用Java实现RSA非对称加密算法,文中有非常详细的解释及代码示例,对正在学java算法的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • spring boot项目自定义参数校验规则示例详解

    spring boot项目自定义参数校验规则示例详解

    这篇文章主要介绍了spring boot项目如何自定义参数校验规则,自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java的方法重载与变量作用域简介

    Java的方法重载与变量作用域简介

    这篇文章主要介绍了Java的方法重载与变量作用域,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • SpringBoot2.0集成MQTT消息推送功能实现

    SpringBoot2.0集成MQTT消息推送功能实现

    这篇文章主要介绍了SpringBoot2.0集成MQTT消息推送功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Mybatis-plus新版本分页失效PaginationInterceptor过时的问题

    Mybatis-plus新版本分页失效PaginationInterceptor过时的问题

    这篇文章主要介绍了Mybatis-plus新版本分页失效,PaginationInterceptor过时问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java中左移和右移问题图文详解

    Java中左移和右移问题图文详解

    左移和右移并不常用,在一些特殊情况下才会使用,比如加解密时,会大量用到,这篇文章主要给大家介绍了关于Java中左移和右移问题的相关资料,需要的朋友可以参考下
    2021-11-11

最新评论