selection problem-divide and conquer
2017-03-07 23:03
218 查看
思路:
随机选取列表中的一个值v,然后将列表分为小于v的,等于v的,大于v的三组。对于k<=left.size()时,
在left中执行selection;落在中间的,返回v;k>left.size()+mid.size()时,在right中执行selection。
需要注意rand()函数的使用。
#include <iostream> #include <cmath> #include <vector> #include <ctime> #include <time.h> #include <stdlib.h> using namespace std; class Solution { public: int selection(vector<int>& s, int k) { // for rand() srand((unsigned)time(0)); // [0,size-1] int v = s[rand() % (s.size())]; vector<int> left, mid, right; // assign values to left, mid and right for (int i = 0; i < s.size(); i++) { if (s[i] < v) left.push_back(s[i]); else if (s[i] == v) mid.push_back(s[i]); else right.push_back(s[i]); } // k < v if (k <= left.size()) return selection(left, k); else if (k > left.size() && k <= left.size()+mid.size()) return v; else // k > v return selection(right, k-left.size()-mid.size()); } }; int main() { Solution s; int arr[11] = {2,36,5,21,8,13,11,20,5,4,1}; vector<int> v(arr, arr+11); cout << s.selection(v,6) << endl; return 0; }
相关文章推荐
- Divide and Conquer -- Leetcode problem240. Search a 2D Matrix II
- leetcode_c++:Divide and Conquer: The Skyline Problem(218)
- DivideAndConquer-最大子数组问题
- Divide And Conquer-241-Different Ways to Add Parentheses
- leetcode_c++:Divide and Conquer: . Search a 2D Matrix II(240)
- sgu229:Divide and conquer(模拟+分析)
- 162. Find Peak Element (Array; Divide-and-Conquer)
- 关于divide and conquer的两道Leetcode
- Divide and Conquer&Count Inversions归并排序求逆序数
- [week 14][Leetcode][Divide and Conquer] Majority Element
- Divide and conquer:Drying(POJ 3104)
- implement The Maximum Subarray using divide and conquer
- 109. Convert Sorted List to Binary Search Tree (List; Divide-and-Conquer, dfs)
- LeetCode--Divide and Conquer
- 分治法 ( Divide And Conquer ) 详解
- 4. Divide-and-Conquer——Introduction to Algorithms Third Edition
- leetcode-Divide and Conquer
- leetcode_c++:Divide and Conquer: Different Ways to Add Parentheses(241)
- LeetCode之Divide and Conquer题目汇总
- [week 15][Leetcode][Divide and Conquer] Search a 2D Matrix II