[LeetCode]Kth Largest Element in an Array
2015-07-29 23:24
531 查看
解题思路:
1,借用快排分治的思想;
2,递归函数中,每次随机选取一个数作为标的mark;
3,把 比mark大的存入一个数组larger,比mark小的存入另外一个数组smaller
4,结束条件就是,所找的第k大的数, k == larger.size() + 1
1,借用快排分治的思想;
2,递归函数中,每次随机选取一个数作为标的mark;
3,把 比mark大的存入一个数组larger,比mark小的存入另外一个数组smaller
4,结束条件就是,所找的第k大的数, k == larger.size() + 1
// C++ 实现 class Solution { public: int findKthLargest(vector<int>& nums, int k) { return find(nums, k); } int find(vector<int>& nums, int k){ int n = nums.size(); vector<int> smaller; vector<int> larger; int inx = rand()%n; for (auto elem: nums){ if (elem > nums[inx]){ larger.push_back(elem); }else if (elem < nums[inx]){ smaller.push_back(elem); } } int sizeA = smaller.size(); int sizeB = larger.size(); if (sizeB < k && (n - sizeA) >= k){ return nums[inx]; }else{ if (sizeB >= k){ return find(larger, k); }else if (n - sizeA < k){ return find(smaller, k-(n-sizeA)); } } } };
# python 实现 import random class Solution: # @param {integer[]} nums # @param {integer} k # @return {integer} def find(self, nums, n, k): inx = int(random.random()*n) a = [ i for i in nums if i < nums[inx]] smaller = len(a) b = [ i for i in nums if i > nums[inx]] larger = len(b) if smaller < k and n - larger >= k: return nums[inx] else: if smaller >= k: return self.find(a, smaller, k) elif n - larger < k: return self.find(b, larger, k - (n-larger)) def findKthLargest(self, nums, k): return self.find(nums, len(nums), len(nums)- k + 1)
相关文章推荐
- Android沉浸式状态栏设计(安卓4.4以上才能支持)
- lua 文件读写
- OLED显示汉字
- iOS开发分分钟搞定C语言 —— 数组及排序
- DT大数据梦工厂 温故而知新 之1~4讲
- Linux下php安装Redis扩展
- iOS核心动画高级技巧之核心动画(三)
- OKHttp源码解析(二)
- C语言命令行传参
- Android中的五大布局
- Java基础复习(七)
- [转]javascript console 函数详解 js开发调试的利器
- Dom4j
- 【PHP】中关于session使用
- Python文件操作读写文件
- Bootstrap组件之输入框组
- 黑马程序员------OC @property 关键字及构造方法的使用
- Activity的状态保存
- Oracle学习历程--创建用户,分配表空间
- myslq-5.6基于GTID的主从复制实现