786. 第 K 个最小的素数分数【我亦无他唯手熟尔】
786. 第 K 个最小的素数分数
- 786. 第 K 个最小的素数分数
- 题解
786. 第 K 个最小的素数分数
难度 困难
给你一个按递增顺序排序的数组 arr
和一个整数 k
。数组 arr 由 1
和若干 素数 组成,且其中所有整数互不相同。
对于每对满足 0 < i < j < arr.length
的 i
和 j
,可以得到分数 arr[i] / arr[j]
。
那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的答案, 这里 answer[0] == arr[i]
且 answer[1] == arr[j]
。
示例 1:
输入:arr = [1,2,3,5], k = 3
输出:[2,5]
解释:已构造好的分数,排序后如下所示:
1/5, 1/3, 2/5, 1/2, 3/5, 2/3
很明显第三个最小的分数是 2/5
示例 2:
输入:arr = [1,7], k = 1
输出:[1,7]
提示:
- 2 <= arr.length <= 1000
- 1 <= arr[i] <= 3 * 104
- arr[0] == 1
- arr[i] 是一个 素数 ,i > 0
- arr 中的所有数字 互不相同 ,且按 严格递增 排序
- 1 <= k <= arr.length * (arr.length - 1) / 2
题解
思路一:暴力解法就不说了
class Solution {public int[] kthSmallestPrimeFraction(int[] arr, int k) {int n = arr.length;List<int[]> frac = new ArrayList<int[]>();for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {frac.add(new int[]{arr[i], arr[j]});}}Collections.sort(frac, (x, y) -> x[0] * y[1] - y[0] * x[1]);return frac.get(k - 1);}
}作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/k-th-smallest-prime-fraction/solution/di-k-ge-zui-xiao-de-su-shu-fen-shu-by-le-argw/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路二:
对于每一个arr[i] ,求出它的arr[i] / arr[j],它是一个递增的数组
把arr.length个递增的数组求出的k个最小值
官方题解
class Solution {public int[] kthSmallestPrimeFraction(int[] arr, int k) {int n = arr.length;PriorityQueue<int[]> pq = new PriorityQueue<int[]>((x, y) -> arr[x[0]] * arr[y[1]] - arr[y[0]] * arr[x[1]]);for (int j = 1; j < n; ++j) {pq.offer(new int[]{0, j});}for (int i = 1; i < k; ++i) {int[] frac = pq.poll();int x = frac[0], y = frac[1];if (x + 1 < y) {pq.offer(new int[]{x + 1, y});}}return new int[]{arr[pq.peek()[0]], arr[pq.peek()[1]]};}
}
786. 第 K 个最小的素数分数【我亦无他唯手熟尔】相关推荐
- 786. 第 K 个最小的素数分数
786. 第 K 个最小的素数分数 给你一个按递增顺序排序的数组 arr 和一个整数 k .数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同. 对于每对满足 0 < i < ...
- 力扣786. 第 K 个最小的素数分数(自定义排序方式)?
786. 第 K 个最小的素数分数 - 力扣(LeetCode) (leetcode-cn.com) class Solution {public int[] kthSmallestPrimeFrac ...
- leetcode 786 第K个最小的素数分数
https://leetcode-cn.com/problems/k-th-smallest-prime-fraction/ 题目 给你一个按递增顺序排序的数组arr和一个整数k.数组arr由1和若干 ...
- 77. Leetcode 1439. 有序矩阵中的第 k 个最小数组和 (堆-技巧二-多路归并)
技巧二 - 多路归并其实这个技巧,叫做多指针优化可能会更合适,只不过这个名字实在太过朴素且容易和双指 针什么的混淆,因此我给 ta 起了个别致的名字 - 多路归并.多路体现在:有多条候选路线.代码上, ...
- 选择问题(求第k个最小元素)
什么是选择问题 划分的思路 Lomuto 划分 利用划分求第k小元素 C语言实现 改进 参考资料 什么是选择问题 选择问题(selection problem)是求一个n个数列表的第k个最小元素的问题 ...
- C语言在二叉搜索树找到第k个最小元素(附完整源码)
C语言在二叉搜索树找到第k个最小元素 C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) #in ...
- 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素
二叉搜索树中第k大元素 Problem statement: 问题陈述: Find the k-th smallest element in a given binary search tree (B ...
- 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cmath ...
- 计算区间素数和,杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序
杨老师正在上<离散数学>课程的"数论"内容,讲授素数的知识.素数又称为质数.一个大于1的整数p是素数,当且仅当p只能被1和自身整除.很显然,2是最小的素数.他想设计一个 ...
最新文章
- 我们从那里来—子宫日记 Womb
- R语言生存分析COX回归分析实战:放疗是否会延长胰脏癌症患者的生存时间
- yum whatprovides 查找哪个包可以提供缺失的文件
- 贝叶斯算法对文本进行分类实例
- 【Linux】一步一步学Linux——exec命令(208)
- 直线电机原理动画_最新的3D动画演示:同步电机原理及技术,一般人看不懂
- 用浏览器管理 Docker
- asp.net学习笔记异常处理001---.framework4.0中asp.net页面ValidateRequest=false 无效的问题
- Linux安装mysql-5.7.17
- 《通信原理》复习笔记4----第四章信道相关例题
- switchhosts使用
- android 实现谷歌地图
- Python中的变量
- java zone_offset_java 的 ZoneOffset 与 ZoneId
- 高企奖励来啦!2022年武汉市各区高新技术企业奖励补贴汇总和申报时间、申报条件
- ChatGPT 最好的替代品
- c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc
- 关于 LambdaMART 的六个疑惑
- 共享单车项目、mongodb集群
- 微信小程序input弹出键盘挡住文字的解决办法