链接

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

题目

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

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

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

示例

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

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

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

说明

  • 1 <= nums.length <= 1000
  • -10e5 <= nums[i] <= 10e5
  • 1 <= k <= nums.length

思路

题目思路很简单,就是要找出前k大的元素,然后按照这k个元素在数组中的原始顺序,存入新的数组中返回,难就难在如何按原来的顺序放进新数组。这里我们使用一个辅助的二维数组map,第一个维度存储原始的下标,第二个维度存储对应的值,如nums = [3,4,3,3],存成map = [[0,3],[1,4],[2,3],[3,3]],如此进行两次排序即可,第一次排序对第二个维度,也就是值进行降序排序,然后再对排序后的前k个元素,按照第一个维度(下标)进行排序,再依次存入新数组中即可。这里有个很关键的知识点就是java中的sort排序函数,sort(T[] a, int formIndex, int toIndex, Comparator<? supre T> c)中,可以指定formIndex和toIndex两个参数,也就是指定排序的范围。

Java Code

class Solution {public int[] maxSubsequence(int[] nums, int k) {int n = nums.length;int[][] map = new int [n][2];for(int i=0; i<n; i++){map[i][0] = i;map[i][1] = nums[i];}Arrays.sort(map, (a, b) -> b[1] - a[1]); //对值进行降序排序Arrays.sort(map, 0, k, (a, b) -> a[0] - b[0]); //注意这里只对前k个进行小标升序排序int[] res = new int[k];for(int i = 0; i < k; i++){res[i] = map[i][1];}return res;}
}

Leetcode-2099. 找到和最大的长度为 K 的子序列相关推荐

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

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums 和一个整数 k . 你需要找到 nums 中长度为 k 的 子序列 ,且这个子序列的 和最大 . 请你返回 任意 一个长度为 ...

  2. 2099 找到和最大的长度为 K 的子序列

    题目描述: 给你一个整数数组 nums 和一个整数 k .你需要找到 nums 中长度为 k 的 子序列 ,且这个子序列的 和最大 . 请你返回 任意 一个长度为 k 的整数子序列. 子序列 定义为从 ...

  3. LeetCode 2217. 找到指定长度的回文数

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个整数数组 qu ...

  4. LeetCode 1708. 长度为 K 的最大子数组

    文章目录 1. 题目 2. 解题 1. 题目 在数组 A 和数组 B 中,对于第一个满足 A[i] != B[i] 的索引 i ,当 A[i] > B[i] 时,数组 A 大于数组 B. 例如, ...

  5. LeetCode 1100. 长度为 K 的无重复字符子串(滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的 数目. 示例 1: 输入:S = "havefuno ...

  6. leetcode 658. 找到 K 个最接近的元素

    leetcode 658. 找到 K 个最接近的元素 题目描述: 给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排 ...

  7. LeetCode 2138. 将字符串拆分为若干长度为 k 的组

    文章目录 1. 题目 2. 解题 1. 题目 字符串 s 可以按下述步骤划分为若干长度为 k 的组: 第一组由字符串中的前 k 个字符组成,第二组由接下来的 k 个字符串组成,依此类推.每个字符都能够 ...

  8. 两个有序数组A、B,长度分别为m、n,找到两个数组的第k个值并返回

    /*************************************************************************** **description:两个有序数组A.B ...

  9. LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)

    LeetCode--802. 找到最终的安全状态[Find Eventual Safe States][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 反图 + 拓扑排序 (1)思路 ...

最新文章

  1. 申报成功后怎样修改_【小白教程】12月第3期《申报成功后,如何更正,快快收藏!》...
  2. centos 6.5 搭建lnmp环境
  3. 关于随机验证码的一些小见解。
  4. 北京林业大c语言程序设计考试试题,2020年南京林业大学2017考研真题考研真题试卷及试题答案,C程序设计考研试题下载...
  5. ThinkPHP多次重复提交问题的根源
  6. Linux磁盘管理1
  7. jeesite如何已生成数据的数据源_如何在postman中自动生成接口请求数据,这个功能你需要知道,可结合浏览器和两大抓包工具使用...
  8. 高可用(HA)集群原理概述
  9. Java 位运算符 深入理解
  10. 如何打开oracle的回闪,oracle回闪操作
  11. 计算机代数与数论pdf,基础数论算法 - maTHμ - 计算机代数系统.pdf
  12. 努力成为一个有本事,没脾气的程序员
  13. V-REP笔记:导出自己的机器人模型
  14. ospf(MGRE的星型结构和全连结构)
  15. linux中的sh、dash、bash的区别
  16. 网络工程师学习Linux的亲身历程
  17. 电路原理 | 二阶动态电路
  18. slice与split的区别
  19. EXCEL按照文字颜色统计数量
  20. 微信群被封怎么办?微信群如何防封?一招解决永不封群!

热门文章

  1. MIMO OFDM 系统常用信号检测算法
  2. 【技术史】人工智能的发展历程、技术发展和应用领域
  3. m4a怎么转换成mp3的4种方法值得收藏
  4. windows查看dll导出函数名
  5. 微软CEO 鲍尔默的一天
  6. 黑马Linux笔记05【Linux系统软件安装,MySQL、Tomcat、Nginx、RabbitMQ、Redis、ElasticSearch、Zookeeper】
  7. 求一维数组中的最大数c语言,C语言 求一维数组中最大值的位置
  8. 【无标题】Realsense ROS驱动安装以及报错处理
  9. 如何 拍 计算机 屏幕,电脑屏幕还能这么用?拍照太方便了
  10. 【应急响应】Windows应急响应