力扣每日一题 找出数组的第 K 大和 小根堆 逆向思维(TODO:二分+暴搜)

Problem: 2386. 找出数组的第 K 大和
在这里插入图片描述

文章目录

  • 思路
  • 复杂度
  • 💖 小根堆
  • 💖 TODO:二分 + 暴搜

思路

👨‍🏫 灵神题解

在这里插入图片描述
在这里插入图片描述

复杂度

时间复杂度:

添加时间复杂度, 示例: O ( n ) O(n) O(n)

空间复杂度:

添加空间复杂度, 示例: O ( n ) O(n) O(n)

💖 小根堆

class Solution {class Pair{long sum;int idx;public Pair(long x, int y){super();this.sum = x;this.idx = y;}}public long kSum(int[] nums, int k){long sum = 0;int n = nums.length;for (int i = 0; i < n; i++){if (nums[i] >= 0)sum += nums[i];elsenums[i] = -nums[i];}Arrays.sort(nums);PriorityQueue<Pair> heap = new PriorityQueue<>((a, b) -> Long.compare(a.sum, b.sum));heap.offer(new Pair(0L, 0));// 空子序列
//		一个不选也是一种情况while (--k > 0)// 注意:--k 比 k-- 要少一次循环{Pair p = heap.poll();long s = p.sum;
//			System.out.print(s + " "); //调试输出int i = p.idx;if (i < n){
//				在子序列末尾添加 nums[i]heap.offer(new Pair(s + nums[i], i + 1));// 下一个要添加的元素下标为 i+1if (i > 0)// 替换子序列末尾元素为 nums[i]heap.offer(new Pair(s + nums[i] - nums[i - 1], i + 1));}}
//		heap.peek().sum 是第k小
//		sum 是第 1 大return sum - heap.peek().sum;}}

💖 TODO:二分 + 暴搜

class Solution {public long kSum(int[] nums, int k) {long sum = 0, right = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] >= 0) {sum += nums[i];} else {nums[i] = -nums[i];}right += nums[i];}Arrays.sort(nums);long left = -1;while (left + 1 < right) { // 开区间二分,原理见【前置知识】long mid = (left + right) / 2;cnt = k - 1; // 空子序列算一个dfs(0, mid, nums);if (cnt == 0) { // 找到 k 个元素和不超过 mid 的子序列right = mid;} else {left = mid;}}return sum - right;}private int cnt;// 反向递归,增加改成减少,这样可以少传一些参数private void dfs(int i, long s, int[] nums) {if (cnt == 0 || i == nums.length || s < nums[i]) {return;}cnt--;dfs(i + 1, s - nums[i], nums); // 选dfs(i + 1, s, nums); // 不选}
}// 作者:灵茶山艾府

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最新版】ChatGPT/GPT4科研应用与AI绘图论文写作(最新增加Claude3、Gemini、Sora、GPTs技术及AI领域中的集中大模型的最新技术)

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

使用 Python 读取 NetCDF 数据

栅格通用数据格式(NetCDF)通常用于存储多维地理数据。这些数据的一些示例包括温度、降水量和风速。NetCDF 中存储的变量通常每天在大片(大陆)区域进行多次测量。由于每天进行多次测量,数据值会快速积累并且变得难以处理。当每个值还分配给一个地理位置时,数据管理会更加复…

AQS中的CLH

前言&#xff1a; AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是 Java 中用于实现锁和同步器的基础框架&#xff0c;它使用了一种名为 CLH&#xff08;Craig, Landin, and Hagersten&#xff09;的队列算法。 解释&#xff1a; CLH 队列算法是一种基于链表的公平…

如何解决Ubuntu系统域名解析失败的问题

在Ubuntu系统中遇到域名解析失败的问题时&#xff0c;用户可能会收到如“ping: google.com: 域名解析暂时失败”的错误信息&#xff0c;这意味着系统无法将网站域名转换为其相应的IP地址。虽然你的系统可能已经连接到互联网&#xff08;如能够ping通IP地址8.8.8.8&#xff09;&…

springboot257基于SpringBoot的中山社区医疗综合服务平台

中山社区医疗综合服务平台的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;居民信息因为其管理内容繁杂&#xff0c;管…

Solidity Uniswap V2 价格预言机

预言机是连接区块链与链下服务的桥梁&#xff0c;这样就可以从智能合约中查询现实世界的数据。Chainlink 是最大的oracle网络之一&#xff0c;创建于 2017 年&#xff0c;如今已成为许多 DeFi 应用的重要组成部分。https://github.com/XuHugo/solidityproject Uniswap 虽然是链…

Unity 使用HyBirdCLR调用Newtonsoft.json报错问题

查了老半天&#xff0c;原来是这里的问题 官方解释 解释&#xff1a; 在Unity的IL2CPP Code Generation中&#xff0c;"Faster runtime"和"Faster (smaller) builds"是两种不同的优化设置选项&#xff0c;它们分别影响着运行时性能和构建大小。下面是它们…

JavaScript:for of 与for in的区别

for of 和 for in 都是JavaScript中用于遍历对象或集合的循环结构&#xff0c;但它们的目的和用法有所不同&#xff1a; 相同点&#xff1a; 都是用来遍历数据结构&#xff0c;可以用来处理数组、Set、Map等可迭代对象或对象属性。 区别 1、遍历对象的性质不同 for in 语句…

最顶级的Unity团队都在使用的技巧!!!

作为该系列的第二篇文章&#xff0c;今天将给大家分享一下&#xff0c;Unity最资深的团队是如何设置物理、UI和音频的。希望可以帮助大家最大限度的使用Unity引擎。 第一篇给大家介绍了如何提高资源、项目配置和图形的性能&#xff0c;感兴趣的朋友千万不要错过了。 文章链接…

关于playbook中when条件过滤报The conditional check ‘result|failed‘ failed的问题

问题现象 在使用plabook中的when做过滤脚本如下&#xff1a; --- - hosts: realserversremote_user: roottasks:- name: Check if httpd service is runningcommand: systemctl status httpdregister: resultignore_errors: True- name: Handle failed service checkdebug:ms…

【运维】本地部署Gemma模型(图文)

工具简介 我们需要使用到两个工具&#xff0c;一个是Ollama&#xff0c;另一个是open-webui。 Ollama Ollama 是一个开源的大语言平台&#xff0c;基于 Transformers 和 PyTorch 架构&#xff0c;基于问答交互方式&#xff0c;提供大语言模型常用的功能&#xff0c;如代码生…

Redis缓存三大问题-穿透、击穿、雪崩

缓存穿透 缓存中明明没有对应数据&#xff0c;但是有大量的请求这些不存在的数据&#xff0c;导致大量请求直接打在DB上 缓存空对象 设置空key 缺点&#xff1a;大量浪费Redis的内存空间&#xff0c;建议还是要给空key设置一个过期时间 利用singleflight 往 redis 写空null…

js 【详解】异步

为什么需要使用异步&#xff1f; 减少等待时间&#xff1a;异步编程允许程序在等待某些操作&#xff08;如网络请求或文件读取&#xff09;完成时继续执行其他任务&#xff0c;而不是空等&#xff0c;这样可以显著减少等待时间。提高响应速度&#xff1a;由于JavaScript是单线程…

【Web】浅聊Java反序列化之C3P0——URLClassLoader利用

目录 前言 C3P0介绍 回归本源——序列化的条件 利用链 利用链分析 入口——PoolBackedDataSourceBase#readObject 拨云见日——PoolBackedDataSourceBase#writeObject 综合分析 EXP 前言 这条链最让我眼前一亮的就是对Serializable接口的有无进行了一个玩&#xff0c…

Mybatis-plus连接多数据源操作(SQLServer、MySQL数据库)

Mybatis-plus连接多数据源操作&#xff08;SQLServer、MySQL数据库&#xff09; 一、依赖二、yml配置文件三、业务类四、测试 一、依赖 <!--mybatis多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spri…

采用 Amazon DocumentDB 和 Amazon Bedrock 上的 Claude 3 构建游戏行业产品推荐

前言 大语言模型&#xff08;LLM&#xff09;自面世以来即展示了其创新能力&#xff0c;但 LLM 面临着幻觉等挑战。如何通过整合外部数据库的知识&#xff0c;检索增强生成&#xff08;RAG&#xff09;已成为通用和可行的解决方案。这提高了模型的准确性和可信度&#xff0c;特…

C++ 求圆面积

编写一个带默认参数的函数area&#xff0c;第一个参数为半径&#xff0c;第二个参数为圆周率&#xff0c;默认值为3.14 .参数类型及返回类型都为double. 裁判测试程序样例&#xff1a; #include <iostream> using namespace std; /* 请在这里填写答案 */ int main() …

Autosar教程-Mcal教程-GPT配置教程

3.3GPT配置、生成 3.3.1 GPT配置所需要的元素 GPT实际上就是硬件定时器,需要配置的元素有: 1)定时器时钟:定时器要工作需要使能它的时钟源 2)定时器分步:时钟源进到定时器后可以通过分频后再给到定时器 定时器模块选择:MCU有多个定时器模块,需要决定使用哪个定时器模块作…

21-Java观察者模式 ( Observer Pattern )

Java备忘录模式 摘要实现范例 观察者模式 ( Observer Pattern ) 常用于对象间存在一对多关系时&#xff0c;比如&#xff0c;当一个对象被修改时&#xff0c;需要自动通知它的依赖对象 观察者模式属于行为型模式 摘要 1. 意图 定义对象间的一种一对多的依赖关系&#xff…

css选择器nth-child(n)的学习理解

css3 新增的:nth-child(n)选择器您真的理解吗&#xff1f; :nth-child(n)&#xff1a;用来选择某个父元素的一个或多个特定的子元素。其中 n 是一个参数&#xff0c;代表了你想要选择的子元素的序号。这里的 n 可以是以下几种形式&#xff1a; /*1:具体的数字&#xff1a;*/ …