我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数。
此处假设数组中没有相同的数,原排列顺序是递增排列。
在轮转后的有序数组中查找最小数的算法如下:

int findIndexOfMin(int num[],int n) {int l = 0; int r = n-1; while(l <= r) { int mid = l + (r - l) / 2; if (num[mid] > num[r]) { l = mid + 1; } else { r = mid - 1; } } return l; }

接着基于此结果进行偏移,再基于数组长度对偏移后的值取模,就可以找到第K个数在数组中的位置了:

int findKthElement(int num[], int m, int k)
{if (k > m) return -1; int base = findIndexOfMin(num, 0, m-1); int index = (base+k-1) % m; return index; }

转载于:https://www.cnblogs.com/energy1010/p/6284604.html

找轮转后的有序数组中第K小的数相关推荐

  1. 算法导论:快速找出无序数组中第k小的数

    题目描述: 给定一个无序整数数组,返回这个数组中第k小的数. 解析: 最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1). ...

  2. 找出数组中第k大小的数,输出数所在的位置

    找出数组中第k大小的数,输出数所在的位置 /*写一段程序,找出数组中第k大小的数,输出数所在的位置.例如{2,4,3,4,7}中,第一大的数是7,位置在4. 第二大.第三大的数都是4,位置在1.3随便 ...

  3. 找出数组中第k大的数

    给定一个数组,找出数组中第k大的数.其实现代码如下: package com.threeTop.www;/*** 找出数组中第k大的数* @author wjgs**/ public class Fi ...

  4. Java找出数组中第K大的数

    题目描述 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5 ...

  5. python n个list如何组成矩阵_有序矩阵中第K小的元素amp;x的平方根(二分法篇)

    69. x的平方根 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例1: ...

  6. leetcode378. 有序矩阵中第K小的元素(Python3)

    文章目录 leetcode378. 有序矩阵中第K小的元素 方法一:直接排序 思路: 代码: 结果: 方法二:二分查找 思路: 代码: 结果: leetcode378. 有序矩阵中第K小的元素 给定一 ...

  7. Leetcode215数组中第k大的数-最小堆

    题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...

  8. 寻找数组中第k大的数

    题目:有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2 ...

  9. Leetcode刷题100天—378. 有序矩阵中第 K 小的元素(优先队列)—day16

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是 排序后 的第 k 小元素,而不是 ...

  10. java查找第k大的数字_查找数组中第k大的数

    问题:  查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...

最新文章

  1. JavaScript_下_Dom
  2. MySQL 5.7最新版本的2个bug
  3. C++.Templates学习总结归纳1
  4. 震惊!递推与递归竟然可以这么编!%99的程序员都不知道!
  5. 数据库“裸奔”再引祸端:VOIPO数百万呼叫和短信日志流出
  6. c#窗口操作-句柄操控全解
  7. SQLServer数据库基础教程
  8. java数组写99乘法表,Java 实例九九乘法表
  9. pick out.php,pick_out.php
  10. 2021上海第34届创业连锁加盟展会
  11. matlab 坐标移动,如何移动坐标轴到指定的位置
  12. AD转换汇编语言模数转换实验
  13. IntelliJ IDEA修改项目名字
  14. serface rt 应用软件分享 --持续更新
  15. SQL注入攻防入门详解
  16. win10出现的各种问题
  17. Google每日发布达芬奇密码
  18. xbox虚拟服务器,Win8大百科18期:如何在PC上玩Xbox游戏
  19. 排列(permutation)
  20. 彩铅画适合哪类人群学习?想要学习彩铅画的看这里

热门文章

  1. html手机弧线div,纯css实现让div的四个角成弧形
  2. linux opencl安装方法,如何在Ubuntu上安装libOpenCL.so
  3. maven+scala和java_maven打包scala+java工程
  4. bs架构与cs架构的区别_性能测试流程5步走:BS架构和CS架构性能指标大对比
  5. 【CF-gym101964:B】Broken Watch(找规律+推导+自然溢出/java大数)
  6. HTML标记特定,制作asp:标记特定的HTML标记
  7. java ee自学_自学JavaEE难度大不大?
  8. 翻译: 3.2. 从零开始实现线性回归 深入神经网络 pytorch
  9. 阿里云云计算 17 块存储的分类
  10. 极客大学算法突击训练营-毕业总结