leetcode 周赛 2386. 找出数组的第 K 大和-java实现

news2024/11/15 20:04:21

题目所属分类

华为校招

原题链接

给你一个整数数组 nums 和一个 正 整数 k 。你可以选择数组的任一 子序列 并且对其全部元素求和。

数组的 第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复)

返回数组的 第 k 大和 。

子序列是一个可以由其他数组删除某些或不删除元素排生而来的数组,且派生过程不改变剩余元素的顺序。

注意:空子序列的和视作 0 。

代码案例:输入:nums = [2,4,-2], k = 5
输出:2
解释:所有可能获得的子序列和列出如下,按递减顺序排列:

  • 6、4、4、2、2、0、0、-2
    数组的第 5 大和是 2 。

题解

B站的题解视频
在这里插入图片描述
其实也可以用最大堆做, 本质上 就是求出所有正数的和Sum
然后问第K大子序列的和
就是在Sum上减去k-1个最小非空子序列的和
如果是最小堆 那么最终的结果就是 sum - kSum
如果是最大堆 那么直接就是堆顶元素了

具体来说,最大堆维护子序列的和,以及(后续需要减去的)数字的下标 i。

初始时,将 sum 和下标 0 入堆。

最大堆

最小堆
额 自己写的这个最小堆通过不了 最大堆的通过了 不知道哪里有问题 看不出来 有看出的小伙伴可以给我指出错误点

class Solution {
    public long kSum(int[] nums, int k) {
        long Sum = 0l;
        for(int a : nums){
            if(a >= 0) Sum += a ;
            else a = -a ;
        }
        Arrays.sort(nums);
        PriorityQueue<long[]> q = new  PriorityQueue<>((a,b)->(int)(a[0]-b[0]));
        q.offer(new long[]{nums[0],0});
     //k--;
        while(--k > 0){
            long[] t = q.poll();
            int i = (int) t[1];
            if(i + 1 < nums.length){
                q .offer(new long[]{t[0] + nums[i + 1] - nums[i], i + 1});
                // 上一个下标的数要选
                q .offer(new long[]{t[0] + nums[i + 1], i + 1});
 
               // q.offer(new long[]{t[0]+nums[i],i+1});
               // q.offer(new long[]{t[0] + nums[i]-nums[i-1],i+1});//不选
            }
        }
        return Sum-q.peek()[0];
 
    }
}

问题在求和那里 但是我感觉这两种求和方式都一样啊

 
 class Solution {
    public long kSum(int[] nums, int k) {
        long sum = 0l;
        // for(int a : nums){
        //     if(a >= 0) Sum += a ;
        //     else a = -a ;
        // }
        for (var i = 0; i < nums.length; i++)
            if (nums[i] >= 0) sum += nums[i];
            else nums[i] = -nums[i];
        Arrays.sort(nums);
        PriorityQueue<long[]> q = new  PriorityQueue<>((a,b)->(int)(b[0]-a[0]));
        q.offer(new long[]{sum,0});
        while(--k > 0){
            long[] t = q.poll();
            long s = t[0] ;
            int i = (int) t[1];
            if(i  < nums.length){                
               q.offer(new long[]{s-nums[i],i+1});
                if(i > 0) q.offer(new long[]{s - nums[i]+nums[i-1],i+1});//不选
            }
        }
        return q.peek()[0];
         
 
 
    }
}

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

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

相关文章

【新时代圈友app】为什么要使用MongoDB数据库?— 查询缘分值最高的最佳好友并返回相关信息

目录 一、为什么要使用MongoDB数据库&#xff1f; 二、缘分值最佳好友 思路 一、为什么要使用MongoDB数据库&#xff1f; 本项目涉及到的圈子(动态)功能&#xff0c;用户会对朋友圈进行点赞、评论&#xff1b;那么随着用户的不断增多&#xff0c;评论点赞收藏等信息也会不断…

JS之Map的基本使用

一、Map的基本API 创建&#xff1a; const map new Map()插入&#xff1a;map.set("name", "郑建")读取&#xff1a;map.get("name")判断&#xff1a;map.has("name")删除&#xff1a;map.delete大小&#xff1a;map.size遍历&#…

webhub123 设计师好用的笔刷纹理网站收录​

整理了一些可以免费下载的好用的笔刷和纹理资源网站&#xff0c;收录到 webhub123 设计师好用的笔刷纹理网站收录​http://www.webhub123.com/#/home/detail?projectHashid31645930&ownerUserid21336964 收录效果如下&#xff0c;每个网站显示为一张图片&#xff0c;点击…

【Python基础入门学习】Python基础语法学习

基础认识 1. 注释2. 变量2.1 变量命名规则2.2 变量的类型2.3 不同类型之间的运算规则2.4 变量的输入和输出2.4.1 print 函数使用2.4.2 input 函数使用 2.5 变量的类型转换 3. 分支语句3.1 判断的定义3.2 if 判断语句基本语法3.3 else 处理条件不满足的情况3.4 逻辑运算3.5 if 的…

小红书数据分析:这个夏天,“围炉冰茶”继续刷屏

导语 去年秋冬开始爆火的“围炉煮茶”&#xff0c;果集千瓜数据显示&#xff1a;近90天来&#xff0c;笔记预估阅读总数达1,038.83万&#xff0c;同比下降80.67%&#xff0c;笔记互动总量61.78万&#xff0c;下降高达76.85%。 图 | 果集千瓜数据 受到时令的影响&#xff0c;围…

算法 - 随机 Coding 刷算法合集 [1]

目录 一.数组中重复的数字 [集合] 1.题目要求 2.题目思路 3.题目实现 二.二维数组中的查找 [数组] 1.题目要求 2.题目思路 3.题目实现 三.替换空格 [字符串] 1.题目要求 2.题目思路 3.题目实现 四.从尾到头打印链表 [链表] 1.题目要求 2.题目思路 3.题目实现 …

电脑技巧:分享浏览器5个小技巧,太实用了

大家在日常办公当中&#xff0c;浏览器可以说占用非常大的比重&#xff0c;比如搜个素材、图片、文档等等&#xff0c;今天就来给大家分享5个浏览器使用的小技巧&#xff0c;希望对大家能有所帮助&#xff01; 1、浏览器常用快捷键梳理 其实Web浏览器快捷键很多&#xff0c;但…

MySQL_第14章_视图

第14章_视图 1. 常见的数据库对象 对象描述表(TABLE) 表是存储数据的逻辑单元&#xff0c;以行和列的形式存在&#xff0c;列就是字段&#xff0c;行就是记录 数据字典 就是系统表&#xff0c;存放数据库相关信息的表。系统表的数据通常由数据库系统维护&#xff0c; 程序…

Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字

线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的&#xff0c;即该结果正是在单线程环境中应该出现的结果&#xff0c;则说这个程序是线程安全的。 通俗来说&#xff0c;线程不安全指的就是某一代码在多线程环境下执行会出现b…

【边缘计算】登临(Goldwasser-UL64)BW-BR2边缘设备配置指南

目录 开箱配置激活SDK环境测试cuda兼容性 开箱配置 更改盒子root用户密码&#xff1a; sudo passwd root(密码同为root) 切换到root用户身份&#xff1a; su root查看ssh的状态&#xff0c;没有返回说明没有启动 sudo ps -e|grep ssh此时说明ssh服务已启动。 更改ssh配置文…

Android MediaCodec dump MP4实践小结

1.应用背景 在一些集成了算法SDK的Android APP中&#xff0c;这些APP是取出摄像头实时帧&#xff0c;然后调用视觉算法SDK并产生检测结果。而当测试人员发现某一场景下算法效果欠佳时&#xff0c;需要从摄像头实时原始数据帧dump一段视频&#xff08;mp4格式&#xff09;&#…

【TB作品】MSP430单片机 Proteus仿真 DS18B20温度 LCD1602显示器 温度读取与显示

效果图如下&#xff1a; 首先,让我们先来说说DS18B20集成电路。 • DS18B20是一款采用OneWire通讯协议的集成电路,因此只需要一条线就可以与微控制器通讯。它不需要额外的电源,但是也有外部电源输入端口。 • OneWire设备具有64位的ROM代码。如我们之前所说,这64位的前8位是家…

HDCTF

Welcome To HDCTF 2023 看源码找到game.js 找到这一串 放到控制台运行即可 SearchMaster 题目让post提交一个data 随便传一个在页面执行了 当传入{时他会报错&#xff0c;看报错信息发现 Smarty&#xff0c;猜测Smarty的ssti&#xff0c;数据发送到前端 用{if}标签即可 {…

CHAPTER 5: 《DESIGN CONSISTENT HASHING》 第5章 《设计一致的哈希》

CHAPTER 5: DESIGN CONSISTENT HASHING 为了实现水平扩展&#xff0c;有效且均匀地分发请求/数据是很重要的在服务器上。一致散列是实现这一目标的常用技术。但首先&#xff0c;让我们深入了解一下这个问题。 重组问题 如果您有n个缓存服务器&#xff0c;那么平衡负载的常用…

PCB射频电路四大基础特性及设计技巧

由于射频(RF)电路为分布参数电路&#xff0c;在电路的实际工作中容易产生趋肤效应和耦合效应&#xff0c;所以在实际的PCB设计中&#xff0c;会发现电路中的干扰辐射难以控制。 如&#xff1a;数字电路和模拟电路之间相互干扰、供电电源的噪声干扰、地线不合理带来的干扰等问题…

catkin_make_workspace

ERROR1 : CMake Error at /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found. It does neither exist as an absolute directory nor in ‘${{pr…

Vue-列表过滤

列表过滤 对已知的列表进行数据过滤(根据输入框里面的内容进行数据过滤) 编写案例 通过案例来演示说明 效果就是这样的 输入框是模糊查询 想要实现功能&#xff0c;其实就两大步&#xff0c;1获取输入框内容 2根据输入内容进行数据过滤 绑定收集数据 我们可以使用v-model去…

6.3 收敛性与稳定性

6.3.1 收敛性 数值计算方法的收敛性是指&#xff0c;当取步长趋近于零时&#xff0c;数值解趋近于精确解的速度。一般来说&#xff0c;数值计算方法的收敛性是判断其优劣的重要指标之一。 数值计算方法的收敛性可以通过数学分析来研究&#xff0c;一般需要对数值解和精确解之…

08-Node.js—nvm

目录 1、介绍2、使用2.1 下载安装2.2 常用命令2.2.1 nvm list available2.2.2 nvm list2.2.3 nvm install 18.12.12.2.4 nvm install latest2.2.5 nvm uninstall 18.12.12.2.6 nvm use 18.12.1 参考 1、介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工…

系统集成项目管理工程师——考试重点(三)项目管理一般知识

1.项目定义&#xff1a; 为达到特定的目的&#xff0c;使用一定资源&#xff0c;在确定的期间内&#xff0c;为特定发起人提供独特的产品、服务或成果而进行的一系列相互关联的活动的集合。 2.项目目标&#xff1a; 成果性目标&#xff1a;项目产品本身 约束性目标&…