【优选算法系列】【专题十四优先级队列】第一节.(1046. 最后一块石头的重量和703. 数据流中的第 K 大元素)

文章目录

  • 前言
  • 一、最后一块石头的重量
  • 1.1 题目描述
  • 1.2 题目解析
  • 1.2.1 算法原理
  • 1.2.2 代码编写
  • 1.2.3 题目总结
  • 二、数据流中的第 K 大元素
  • 2.1 题目描述
  • 2.2 题目解析
  • 2.2.1 算法原理
  • 2.2.2 代码编写
  • 2.2.3 题目总结
  • 总结

前言


一、最后一块石头的重量

1.1 题目描述

描述:

有一堆石头,每块石头的重量都是正整数。

每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 xy,且 x <= y。那么粉碎的可能结果如下:

  • 如果 x == y,那么两块石头都会被完全粉碎;
  • 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x

最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0


提示:

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 1000

示例1:


1.2 题目解析

1.2.1 算法原理


1.2.2 代码编写


1.2.3 题目总结


二、数据流中的第 K 大元素

2.1 题目描述

描述:

设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。

请实现 KthLargest 类:

  • KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。
  • int add(int val)val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。

提示:

  • 1 <= k <= 10^4
  • 0 <= nums.length <= 10^4
  • -104 <= nums[i] <= 10^4
  • -104 <= val <= 10^4
  • 最多调用 add 方法 10^4
  • 题目数据保证,在查找第 k 大元素时,数组中至少有 k 个元素

示例1:


2.2 题目解析

2.2.1 算法原理


2.2.2 代码编写


2.2.3 题目总结

总结

相关推荐
phltxy10 分钟前
算法刷题|模拟思想高频题全解(Java版)
java·开发语言·算法
宵时待雨20 分钟前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法
田梓燊24 分钟前
最长的连续序列到底怎么写
算法·哈希算法·散列表
smchaopiao28 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
一叶落43832 分钟前
LeetCode 21. 合并两个有序链表(C语言详解 | 链表经典题)
c语言·数据结构·c++·算法·leetcode·链表
阿里嘎多哈基米1 小时前
速通Hot100-Day04——哈希
数据结构·算法·leetcode·哈希算法·散列表
飞天狗1111 小时前
最短路算法
算法
汉克老师1 小时前
GESPC++考试五级语法知识(二、埃氏筛与线性筛)课后习题
算法·线性筛·素数·gesp5级·gesp五级·埃氏筛·筛法
0 0 01 小时前
洛谷P4427 [BJOI2018] 求和 【考点】:树上前缀和
开发语言·c++·算法·前缀和
佩奇大王1 小时前
P593 既约分数
java·开发语言·算法