【LeetCode】2099. 找到和最大的长度为 K 的子序列

news2024/11/18 3:31:59

【LeetCode】2099. 找到和最大的长度为 K 的子序列

给你一个整数数组 nums 和一个整数 k 。你需要找到 nums 中长度为 k 的 子序列 ,且这个子序列的 和最大 。

请你返回 任意 一个长度为 k 的整数子序列。

子序列 定义为从一个数组里删除一些元素后,不改变剩下元素的顺序得到的数组。

示例

输入:nums = [2,1,3,3], k = 2
输出:[3,3]
解释:
子序列有最大和:3 + 3 = 6 。

输入:nums = [-1,-2,3,4], k = 3
输出:[-1,3,4]
解释:
子序列有最大和:-1 + 3 + 4 = 6 。

输入:nums = [3,4,3,3], k = 2
输出:[3,4]
解释:
子序列有最大和:3 + 4 = 7 。
另一个可行的子序列为 [4, 3] 。

实现

Java

package cn.com.codingce.数组与矩阵.找到和最大的长度为K的子序列;

import java.util.Arrays;

/**
 * 给你一个整数数组nums和一个整数k。你需要找到nums中长度为 k的 子序列,且这个子序列的和最大。
 * 请你返回 任意 一个长度为k的整数子序列。
 * 子序列定义为从一个数组里删除一些元素后,不改变剩下元素的顺序得到的数组。
 * <p>
 * 输入:nums = [2,1,3,3], k = 2
 * 输出:[3,3]
 * 解释:
 * 子序列有最大和:3 + 3 = 6 。
 */
public class Solution {
    // nums = [3,4,3,3], k = 2
    public int[] maxSubsequence(int[] nums, int k) {
        // 4
        int len = nums.length;
        // idxMap:辅助数组,用来存储数值和索引
        int[][] idxMap = new int[len][2];
        for (int i = 0; i < len; i++) {
            idxMap[i][1] = nums[i];
            idxMap[i][0] = i;
        }
        // 按照数值nums[idx]从大到小排序
        Arrays.sort(idxMap, (a, b) -> b[1] - a[1]);
        System.out.println("=====sort");
        for (int[] num : idxMap) {
            for (int n : num) {
                System.out.print(n + "\t");
            }
            System.out.println();
        }
        // 按照索引idx从小到大进行排列
        Arrays.sort(idxMap, 0, k, (a, b) -> a[0] - b[0]);
        System.out.println("=====sort2");
        for (int[] num : idxMap) {
            for (int n : num) {
                System.out.print(n + "\t");
            }
            System.out.println();
        }
        // 复制结果
        int[] res = new int[k];
        for (int idx = 0; idx < k; idx++) {
            // 返回值
            res[idx] = idxMap[idx][1];
        }
        return res;
    }

    public static void main(String[] args) {
        new Solution().maxSubsequence(new int[]{-1, -2, 3, 4}, 3);
    }
}

Output

=====sort
3	4	
2	3	
0	-1	
1	-2	
=====sort2
0	-1	
2	3	
3	4	
1	-2

-1, 3, 4

C++

//
// Created by mxz on 2022/12/24.
//
#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    vector<int> maxSubsequence(vector<int> &nums, int k) {
        vector<pair<int, int>> idx;
        vector<int> ans;
        for (int i = 0; i < nums.size(); ++i) {
            const auto &num = nums[i];
            //idx.push_back(pair<int, int>(i, num));
            idx.emplace_back(i, num);
        }
        // 按照数值nums[idx]从大到小排序
        sort(idx.begin(), idx.end(), [](pair<int, int> a, pair<int, int> b) { return a.second > b.second; });
        // 按照索引idx从小到大进行排列
        sort(idx.begin(), idx.begin() + k, [](pair<int, int> a, pair<int, int> b) { return a.first < b.first; });
        // 复制结果
        for (int i = 0; i < k; ++i) {
            ans.push_back(idx[i].second);
        }
        return ans;
    }
};


int main() {
    vector<int> ret = {2, 3, -1, 4};
    for (const auto &item: (new Solution)->maxSubsequence(ret, 2)) {
        cout << item << endl;
    }

}

Output

3
4

在这里插入图片描述
时间复杂度:O(nlogn),其中 n 为 nums 的长度。即为对辅助数组排序的时间复杂度。
空间复杂度:O(n),即为辅助数组的空间开销。

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

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

相关文章

BIT.1_常见指令以及权限理解

目录使用 XShell 远程登录 Linux下载安装 XShell查看 Linux 主机 ip使用 XShell 登陆主机XShell 下的复制粘贴文件 内容数据 属性数据Linux目录结构相对/绝对路径Linux下基本指令01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&am…

基于Xlinx的时序分析与约束(4)----主时钟约束

主时钟约束语法 主时钟约束&#xff0c;就是我们对主时钟&#xff08;Primary Clock&#xff09;的时钟周期进行约束&#xff08;告诉综合工具布局布线的标准&#xff09;&#xff0c;这个约束是我们用的最多的约束了&#xff0c;也是最重要的约束。 主时钟必须与一个网表对象相…

seo综合查询,怎么看网站在移动端权重高低

移动权重就是指在手机、IPAD等的流量&#xff0c;数值越大流量越多。 未来百度流量一定会更倾向于移动端&#xff0c;移动端搜索将是百度搜索引擎的主要阵地。这一点和用户上网习惯有关系&#xff0c;因为移动网络无处不在。 那么怎么看网站在移动端权重高低&#xff1f;最…

Office选装 + Visio安装

一.Office选装 这里我以装Word、Excel和Powerpoint为例 第一步&#xff1a;下载office tool plus 下载地址&#xff1a;https://otp.landian.vip/zh-cn/ 打开网址后&#xff0c;点击红色的立即下载&#xff0c;进入文件存放页面&#xff1b; 第二步&#xff1a;选择其中一个下…

STM32F103C8T6平衡车

链接&#xff1a;https://pan.baidu.com/s/1WJ9otyE9LuO6Kh5gyQ0Tug?pwd8888 提取码&#xff1a;8888 #define BIN2_Pin GPIO_PIN_12 #define BIN2_GPIO_Port GPIOB #define BIN1_Pin GPIO_PIN_13 #define BIN1_GPIO_Port GPIOB #define AIN1_Pin GPIO_PIN_14 #define AIN1_…

CSS知识点1

CSS:层叠样式表 1.行内样式&#xff1a;<h1 style"background-color: aqua;">Hellocss</h1> 仅对当前标签有效 2.内部样式&#xff1a;写在title处 对当前页面有效 3.外部标签&#xff1a;<link rel"stylesheet" href"./js/main…

干货分享丨超详细的200G QSFP56光模块知识

随着数据中心的快速发展&#xff0c;在100G光模块不足以满足日益增长的网络升级要求而400G还未普及的情况下&#xff0c;200G QSFP56光模块成为了200G以太网部署的主流解决方案。接下来&#xff0c;就由易天光通信为你详细介绍一下200G QSFP56光模块。 200G QSFP56光模块是40G…

供应Biotin-PEG-acid,Biotin-PEG-COOH,生物素-聚乙二醇-羧基

含有生物素和羧酸的线性杂双功能PEG试剂化学试剂Biotin-PEG-acid /Biotin-PEG-COOH其英文名为&#xff0c;它所属分类为Biotin PEG Carboxylic acid PEG。 peg试剂的分子量均可定制&#xff0c;有&#xff1a;生物素-PEG1-羧基、Biotin-PEG2-COOH、生物素-peg3.4-羧基、Biotin…

python代码~创意圣诞树

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 圣诞节(Christmas)本身是一个宗教节&#xff0c;用来庆祝耶稣的诞辰&#xff0c;因而又名耶诞节 Hope all your Christmas dreams come true!    愿你所有的圣诞梦想都成真!    Hope you enjoy the happiness o…

Express 基本使用(简)

前一篇内容讲到Express框架的安装以及对Express项目的目录文件有一定的认识了解之后&#xff0c;使用Express创建了最基本的一个Web服务器&#xff0c;接下来进行对Express框架的一些内容来做一个基本的使用&#xff1b; 创建 Web 服务器 node 或 nodemon 执行app.js文件&#…

贪心法算法

目录 一 算法简介 1&#xff09;算法案例引入 2&#xff09;算法思想 3&#xff09;算法概念 4&#xff09; 算法求解的问题的特征 5&#xff09;算法应用 二 算法常见问题 1&#xff09;活动安排问题&#xff08;区间调度问题&#xff09; 今年暑假不AC 2&#xff…

【QT】信号与槽

信号与槽 信号(Signal) 与 槽(Slot) 是Qt中对象之间的通信方式&#xff0c;可以用一个简单的栗子说明&#xff1a;当我们想要开灯时&#xff0c;按下开关发出指令&#xff0c;这就是信号&#xff1b;而灯泡接收到电流变化&#xff0c;发出光亮&#xff0c;这就是响应(槽)。 我…

通过cmd指令创建vue项目

通过cmd指令创建vue项目 基础材料&#xff1a; 已安装node.js 已安装 npm&#xff08;安装node.js后会自带安装npm&#xff09; 首先通过node –v和npm –v确保他们都安装了&#xff0c;能够看见版本号就表示ok 然后通过指令安装vue脚手架 npm install -g vue/cli5.0.8 安…

QTableView表格控件区域选择-自绘选择区域

一、概述 最近优化了一个小功能&#xff0c;主要是模仿excel相关的操作&#xff0c;觉得还挺不错的&#xff0c;因此在这里进行了整理&#xff0c;分享给有需要的朋友。今天主要是说一下区域选择这项功能&#xff0c;Qt自带的表格控件是具有区域选择功能的&#xff0c;但是他并…

【Linux技术专题系列】「必备基础知识」一起探索(su、sudo等相关身份提权/身份切换机制)

内容简介 Linux技术专题&#xff0c;主要介绍相关&#xff0c;针对于Linux开发和知识体系的必备开发技能以及基础常识&#xff0c;是开发者必备的知识体系和方法论。 什么是用户、用户组 Linux用户 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资…

如何制作mp3音频文件?分享制作mp3的简单方法

MP3 对每个人来说都不是一个陌生的名字&#xff0c;因为它是全球排名第一的主流音乐格式。听过上千首MP3歌曲&#xff0c;你知道自己可以制作MP3文件吗&#xff1f;如果答案是否定的&#xff0c;那么您很幸运能找到这篇文章&#xff0c;因为它将通过向您介绍一个免费且简单的解…

产险精算GLM案例2

这是北美产险精算学会CAS网站上的一个案例&#xff0c;对案例略作修改后进行验证。 原始数据是一个简单的分组数据&#xff1a; ClassAOITerrExposureClaims1Low1762Medium1108443High11791054Low2130625Medium2126826High21291207Low3143848Medium31261019High34046 &#x…

从入门到项目实战 - Vue 列表渲染

Vue 列表渲染上一节&#xff1a;《Vue 条件渲染 》| 下一节&#xff1a;《Vue 数据的单向和双向绑定 》jcLee95 邮箱 &#xff1a;291148484163.com CSDN 主页&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址&#xff1a;https://blog.c…

【Linux技术专题系列】「必备基础知识」一起探索(用户、用户组与文件权限)

内容简介 Linux技术专题&#xff0c;主要介绍相关&#xff0c;针对于Linux开发和知识体系的必备开发技能以及基础常识&#xff0c;是开发者必备的知识体系和方法论。 什么是用户、用户组 Linux用户 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资…

【OpenFeign】【源码+图解】【五】创建FeignClient接口的代理(上)

【OpenFeign】【源码图解】【四】FeignClient实例工具类ReflectiveFeign 目录6. 创建FeignClient接口的代理6.1 收集方法的元数据6.1.1 方法上基础信息6.1.2 方法所在类的注解信息6.1.3 方法上的注解信息6.1.3.1 uri6.1.3.2 produces6.1.3.3 consumes6.1.3.4 headersRequestMap…