Java实现 LeetCode 373 查找和最小的K对数字
373. 查找和最小的K对数字
给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。
定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。
找到和最小的 k 对数字 (u1,v1), (u2,v2) … (uk,vk)。
示例 1:
输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出: [1,2],[1,4],[1,6]
解释: 返回序列中的前 3 对数:
[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]
示例 2:
输入: nums1 = [1,1,2], nums2 = [1,2,3], k = 2
输出: [1,1],[1,1]
解释: 返回序列中的前 2 对数:
[1,1],[1,1],[1,2],[2,1],[1,2],[2,2],[1,3],[1,3],[2,3]
示例 3:
输入: nums1 = [1,2], nums2 = [3], k = 3
输出: [1,3],[2,3]
解释: 也可能序列中所有的数对都被返回:[1,3],[2,3]
PS:
indexArray的标记每一次都会加加,以至于是不能找到重复的,
class Solution {
public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
List<List<Integer>> result = new ArrayList<>();
if (k <= 0) {
return result;
}
// 搜索的起始位置,主要起到优化作用减少循环次数
int[] indexArray = new int[nums1.length];
int startIndex = 0;
while (result.size() < k) {
// 记录当前最小对的和
int min = Integer.MAX_VALUE;
// 记录当前最小对的位置
int currentIndex = -1;
for (int i = startIndex; i < nums1.length; i++) {
// 这里说明nums1[i]已经与nums2中所有元素结对入队列,之后的搜索从nums1[i + 1]开始
if (indexArray[i] == nums2.length) {
startIndex = i + 1;
continue;
}
// 比较,选择最小的
if (nums1[i] + nums2[indexArray[i]] < min) {
min = nums1[i] + nums2[indexArray[i]];
currentIndex = i;
}
// nums1和nums2都升序,所以nums1[i] + nums2[a] <= nums1[nums1.length - 1] + nums2[a]
if (indexArray[i] == indexArray[indexArray.length - 1]) {
break;
}
}
// 防止k > nums1.length * nums2.length,出现则直接跳出
if (currentIndex == -1) {
break;
}
// 最小的对入队
List<Integer> data = new ArrayList<>();
result.add(data);
data.add(nums1[currentIndex]);
data.add(nums2[indexArray[currentIndex]]);
indexArray[currentIndex] = indexArray[currentIndex] + 1;
}
return result;
}
}
Java实现 LeetCode 373 查找和最小的K对数字的更多相关文章
- Leetcode 373.查找和最小的k对数字
查找和最小的k对数字 给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k. 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2. 找到和最小的 ...
- 373 Find K Pairs with Smallest Sums 查找和最小的K对数字
给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k.定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2.找到和最小的 k 对数字 (u1,v1 ...
- [Swift]LeetCode373. 查找和最小的K对数字 | Find K Pairs with Smallest Sums
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- 【Java】 剑指offer(40) 最小的k个数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...
- [LeetCode] Find K Pairs with Smallest Sums 找和最小的K对数字
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- [LeetCode] 373. Find K Pairs with Smallest Sums 找和最小的K对数字
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- Java实现 LeetCode 111 二叉树的最小深度
111. 二叉树的最小深度 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...
- Java实现 LeetCode 215. 数组中的第K个最大元素
215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6 ...
- Java实现 LeetCode 703 数据流中的第K大元素(先序队列)
703. 数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组n ...
随机推荐
- Tomcat服务器的下载与安装,修改端口号
安装及简单配置Tomcat服务器: 1.登录www.apache.org 网站,之后点击Projects , 点击Project List,找到Tomcat. 2.点击Tomcat之后,之后进入Tom ...
- MySQL 主从复制原理及过程讲解
mysql主从原理描述,摘自老男孩. 下面简 单描述下 MySQL Replication 复制的原理及过程 . 1.在 Slave 服务器上执行 start slave 命令开启主从复制开关,主从复 ...
- python语法学习第二天--条件与循环
条件:(一条或多条为true或false的语句.任何非0和非空(null)值为true,0 或者 null为false)若为true执行If下的语句,若为false执行else中的语句 分支: ① i ...
- Mysql 常用函数(8)- concat 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html concat 的作用 连接多个字符串 concat ...
- Mysql 常用函数(23)- sign 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html sign 的作用 返回参数的符号 sign 的语法 ...
- 理解css属性的继承和覆盖
首先,我们梳理一下哪些属性会被继承 文本 color 颜色,a元素除外 direction 方向 font 字体 font-family 字体系列 font-style 字体风格 font-size ...
- Angular的面试题
1.Aangular中组件之间通信的方式 答案:Props down 1.调用子组件,通过自定义属性传值 2.子组件内部通过Input来接收属性的值 Events up 1.在父组件中定义一个有参数 ...
- 2.7 Go交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下. Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED= ...
- Python 图像处理 OpenCV (5):图像的几何变换
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- iptables基本用法
iptables选项参数 [root@test ~]# iptables --help -L #列出指定表所有链上的所有规则,本选项须置于-n选项后面 -n #以数字格式显示地址和端口号 -v #详细 ...