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 * 10410^4104
  • arr[0] == 1
  • arr[i] 是一个 素数 ,i > 0
  • arr 中的所有数字 互不相同 ,且按 严格递增 排序
  • 1 <= k <= arr.length * (arr.length - 1) / 2

解题思路

题目需要求得第 k 个最小的分数,而分数定义为每对满足 0 < i < j < arr.length 的 i 和 j ,得到的arr[i] / arr[j] ,因为数组arr是按递增顺序排序的,因此分数都是小于0的数字。为了避免浮点数的精度丢失,当我们比较当我们比较两个分数 ab\dfrac{a}{b}ba​和 cd\dfrac{c}{d}dc​时,我们可以使用:a×d<b×ca \times d < b \times ca×d<b×c来替代 $\dfrac{a}{b} < \dfrac{c}{d} $的判断,二者是等价的,这样就可以避免计算机浮点数丢失造成的问题。因此我们在排序中需要根据上述规则进行自定义的排序,然后选出第k个最小的分数。

代码

class Solution {public:vector<int> kthSmallestPrimeFraction(vector<int> &arr, int k) {vector<pair<int, int>> cnt;for (int i = 0; i < arr.size(); ++i) {for (int j = i - 1; j >= 0; --j) {cnt.emplace_back(arr[j], arr[i]);}}sort(cnt.begin(), cnt.end(), [&](const auto &x, const auto &y) {return x.first * y.second < x.second * y.first;});return {cnt[k-1].first,cnt[k-1].second};}
};

786. 第 K 个最小的素数分数相关推荐

  1. 力扣786. 第 K 个最小的素数分数(自定义排序方式)?

    786. 第 K 个最小的素数分数 - 力扣(LeetCode) (leetcode-cn.com) class Solution {public int[] kthSmallestPrimeFrac ...

  2. 786. 第 K 个最小的素数分数【我亦无他唯手熟尔】

    786. 第 K 个最小的素数分数 786. 第 K 个最小的素数分数 题解 786. 第 K 个最小的素数分数 难度 困难 给你一个按递增顺序排序的数组 arr 和一个整数 k .数组 arr 由 ...

  3. leetcode 786 第K个最小的素数分数

    https://leetcode-cn.com/problems/k-th-smallest-prime-fraction/ 题目 给你一个按递增顺序排序的数组arr和一个整数k.数组arr由1和若干 ...

  4. 77. Leetcode 1439. 有序矩阵中的第 k 个最小数组和 (堆-技巧二-多路归并)

    技巧二 - 多路归并其实这个技巧,叫做多指针优化可能会更合适,只不过这个名字实在太过朴素且容易和双指 针什么的混淆,因此我给 ta 起了个别致的名字 - 多路归并.多路体现在:有多条候选路线.代码上, ...

  5. 选择问题(求第k个最小元素)

    什么是选择问题 划分的思路 Lomuto 划分 利用划分求第k小元素 C语言实现 改进 参考资料 什么是选择问题 选择问题(selection problem)是求一个n个数列表的第k个最小元素的问题 ...

  6. C语言在二叉搜索树找到第k个最小元素(附完整源码)

    C语言在二叉搜索树找到第k个最小元素 C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) C语言在二叉搜索树找到第k个最小元素完整源码(定义,实现,main函数测试) #in ...

  7. 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素

    二叉搜索树中第k大元素 Problem statement: 问题陈述: Find the k-th smallest element in a given binary search tree (B ...

  8. 120 - 算法 -找到n个无序数中的 第k个最小的数 快排的变体

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cmath ...

  9. 计算区间素数和,杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序

    杨老师正在上<离散数学>课程的"数论"内容,讲授素数的知识.素数又称为质数.一个大于1的整数p是素数,当且仅当p只能被1和自身整除.很显然,2是最小的素数.他想设计一个 ...

最新文章

  1. c语言x在二进制表示下1的个数,算法:计算十进制数字在二进制表示1的个数,...
  2. 【DBMS 数据库管理系统】OLTP 联机事务处理 与 OLAP 联机分析处理 ( 数据仓库 与 OLAP | OLAP 联机分析处理 | OLTP 与 OLAP 区别 )
  3. 小白适用的C语言数据类型转换及转换规则
  4. ppt flash倒计时器_PPT三大神器之iSlide插件
  5. 曲苑杂坛--修改数据库名和文件组名
  6. smoothstep
  7. 计算机组成与结构r形式,计算机组成复习(自己整理的)
  8. 推荐10款 好用的 Jquery 评分插件
  9. Javascript 随机验证码
  10. 团队-团队编程项目作业-开发环境搭建过程
  11. 【剑指offer】出现次数超过一半的数字
  12. Delphi 11.0 Alexandria 来了
  13. CNVD-2020-10487(Tomcat AJP)漏洞
  14. 原型模型| 软件工程
  15. 推荐给初学者:如何学好C语言?
  16. 电脑计算机的符号什么意思,计算机上面的符号代表什么意思  悬赏20
  17. 什么是webpack?webpack构建工具如何理解?webpack是干什么的?
  18. Vlayout使用详细介绍
  19. 一对兔子,出生后第二个月开始有生育能力, 每月繁殖一对小兔子。 问一对兔子一年中可繁殖出多少对兔子?
  20. 【微信小程序】——web前端实战项目

热门文章

  1. 第一章 TCP/IP协议族
  2. Linux信号之signal函数
  3. nginx epoll详解
  4. reverse函数:反转容器内容
  5. CSS的三种定位,成功入职字节跳动
  6. 处理效应模型stata实例_stata︱政策处理效应模型sata基本命令汇总
  7. django中的admin组件
  8. 模型的搜索和优化方法综述:
  9. Codeforces 600E Lomsat gelral (树上启发式合并)
  10. spring3 常见异常解决