中山大学算法课程题目详解(第三周)
2017-09-23 12:33
225 查看
问题描述:
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example,
Given
[3,2,1,5,6,4]and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
解决问题:
采用上课讲述到的分治法来解决这个问题,随机选取一个数字,按小于等于该数字以及大于改数字分成两组,按照每一组的个数跟K进行比较然后进行相应的递归操作。首先我在递归的时候,采用了很多个vector,但是提交的时候一直出现内存限制错误,具体代码如下:
int findKthLargest(vector<int>& nums, int k) { vector<int> leftPart; vector<int> rightPart; for (int i = 1; i < nums.size(); i++) { if (nums[i] <= nums[0]) { leftPart.push_back(nums[i]); } else { rightPart.push_back(nums[i]); } } if (k <= rightPart.size()) { vector<int>().swap(leftPart); return findKthLargest(rightPart, k); } else if (k == rightPart.size() - 1) { return nums[0]; } else { int len = k - rightPart.size() - 1; vector<int>().swap(rightPart); return findKthLargest(leftPart, len); } }我已经使用了网上的vector<int>().swap(leftPart);去清除vector占用的内存(这里要知道vector创建之后并且push,之后进行earse还会会占据很大内存),但是依旧没有解决内存限制的问题,最后改了一下方法,没有在递归过程中用到vector,而是采用下标的方法解决,具体代码如下:
int findKthLargest1(vector<int>& nums, int k) { return findKLargestElement(k, nums, 0, nums.size() - 1); } int findKLargestElement(int k, vector<int>& nums, int low, int high) { int left = low; int right = high; int key = nums[left]; while (left < right) { while (left < right && key > nums[right]) right--; nums[left] = nums[right]; while (left < right && key <= nums[left]) left++; nums[right] = nums[left]; } nums[left] = key; if (left < k - 1) { return findKLargestElement(k, nums, left + 1, high); } else if (left == k - 1) { return key; } else { return findKLargestElement(k, nums, low, left - 1); } }这次作业被vector的内存坑了好久,目前也没法解决,还在研究中,算也是长知识了
相关文章推荐
- 中山大学算法课程题目详解(第四周)
- 中山大学算法课程题目详解(第十五周)
- 中山大学算法课程题目详解(第一周)
- 中山大学算法课程题目详解(第十四周)
- 中山大学算法课程题目详解(第十六周)
- 中山大学算法课程题目详解(第五周)
- 中山大学算法课程题目详解(第十八周)
- 中山大学算法课程题目详解(第十一周)
- 中山大学算法课程题目详解(第七周)
- 中山大学算法课程题目详解(第十二周)
- 中山大学算法课程题目详解(第十三周)
- 中山大学算法课程题目详解(第六周)
- 中山大学算法课程题目详解(第十七周)
- 中山大学算法课程题目详解(第十周)
- 中山大学算法课程题目详解(第十九周)NP问题
- 普林斯顿大学算法课程第三周个人总结
- 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
- 精选微软经典的算法面试100题(第1-20题) -代码详解(题目选自“结构之法”大侠的博客,答案都是本菜鸟自己做的)
- 算法分析与设计课程作业第三周#1
- 算法课程Leetcode作业第三周技术博客