LintCode 中位数/第K大元素
来源:互联网 发布:未来卓越it 编辑:程序博客网 时间:2024/04/30 01:57
给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
给出数组[4, 5, 1, 2, 3], 返回 3
给出数组[7, 9, 4, 5],返回 5
Challenge
时间复杂度为O(n)
若利用快排排序之后再查找,时间复杂度为O(nlgn)。快排每次处理划分之后的两侧,在这里查找中位数只需要处理一侧,时间复杂度为O(n)。
public class Solution { /* * @param nums: A list of integers * @return: An integer denotes the middle number of the array */ public int median(int[] nums) { // write your code here int n=nums.length; if (n%2==0){ return getKNum(nums,0,n-1,n/2-1); } else{ return getKNum(nums,0,n-1,n/2); } } public int getKNum(int[] nums,int l,int right,int k){ int i=l-1; int j=l; while(j<right){ if (nums[j]<nums[right]){ i++; int temp=nums[j]; nums[j]=nums[i]; nums[i]=temp; } j++; } i++; int temp=nums[right]; nums[right]=nums[i]; nums[i]=temp; if(k==i){ return nums[i]; } else if(k<i){ return getKNum(nums,l,i-1,k); } else{ return getKNum(nums,i+1,right,k); } }}
方法getKNum(int[] nums,int l,int right,int k)查找的是数组nums中的第K个数。
阅读全文
0 0
- LintCode 中位数/第K大元素
- LintCode 第K大元素
- LintCode-第k大元素
- 【LintCode】第k大元素
- LintCode 5 第K大元素
- LintCode Python 第k大元素
- [LintCode]5.第k大元素
- LintCode之5 第k大元素
- Lintcode 5. 第k大元素
- (lintcode)第5题第k大元素
- lintcode-第k大元素-197(堆的实现)
- LintCode-剑指Offer-(5)第k大元素
- [LintCode] 第K大元素 Kth Largest Element
- LintCode笔记(12)——第k大元素
- lintcode&九章算法——lintcode NO.5 第k大元素 ? 带解决
- 第k大元素
- 第k大元素
- 第k大元素
- 奇异值分解 SVD(Singular Value Decomposition)
- 【Lua】Lua与C交互
- 如何看路由表!
- 【D3.js】D3.js入门感悟、学习指南
- caffe2之operator介绍(下)
- LintCode 中位数/第K大元素
- Linq实现DaTaTable或者List里面数据值不重复
- 不用加减乘除法做加法
- spring boot(5)-properties参数配置
- MYSQL GROUP BY 对多个字段进行分组
- tf.diag学习
- Hector、Gmapping、Karto、CoreSLAM、LagoSLAM
- 冯诺依曼体系结构
- 1289 大鱼吃小鱼