diff options
| author | Haidong Ji | 2018-11-16 20:50:55 -0600 | 
|---|---|---|
| committer | Haidong Ji | 2018-11-16 20:50:55 -0600 | 
| commit | 5558c3b43f4e6c8501c218b8871cb353cbd9344f (patch) | |
| tree | 02ab46efef7e5a6a2859e1dd026213087dcb42cf | |
| parent | 952c14b4bad84fceb4a3ba812137729f35e936f1 (diff) | |
Majority Element finally done!
Wow, it took awhile to finish. Work has been busy and I haven't had time
to hack...
| -rw-r--r-- | PlaygroundCpp/Sources/Playground.cpp | 112 | 
1 files changed, 28 insertions, 84 deletions
| diff --git a/PlaygroundCpp/Sources/Playground.cpp b/PlaygroundCpp/Sources/Playground.cpp index 39d31da..e9f516d 100644 --- a/PlaygroundCpp/Sources/Playground.cpp +++ b/PlaygroundCpp/Sources/Playground.cpp @@ -1,101 +1,45 @@ -#include <iostream> -#include <cassert>  #include <vector> +#include <iostream>  //#include <gtest/gtest.h>  using std::vector; -int binary_search_recursive(const vector<long> &a, int low, int high, int key) { -	if (high < low) { -		return -1; +int conquer(vector<int> &a, int b, int c, int left, int right) { +	int countB = 0; +	int countC = 0; +	for (int i = left; i < right + 1; i++) { +		if (a[i] == b) +			countB++; +		if (a[i] == c) +			countC++;  	} -	int mid = (low + (high - low) / 2); - -	if (key == a[mid]) { -		return mid; -	} else if (key < a[mid]) { -		return binary_search_recursive(a, low, mid - 1, key); -	} else -		return binary_search_recursive(a, mid + 1, high, key); +	if (countB > (right - left + 1) / 2) +		return b; +	if (countC > (right - left + 1) / 2) +		return c; +	return -1;  } -//int binary_search_iterative(const vector<long> &a, int low, int high, int key) { -//	while (low <= high) { -//		int mid = (low + (high - low) / 2); -//		if (key == a[mid]) { -//			return mid; -//		} else if (key < a[mid]) { -//			high = mid - 1; -//		} else { -//			low = mid + 1; -//		} -//	} -//	return -1; -//} - -int binary_search(const vector<long> &a, int x) { -	int left = 0, right = (int) a.size(); -	return binary_search_recursive(a, left, right, x); +int get_majority_element(vector<int> &a, int left, int right) { +	if (left == right) +		return a[left]; +	int middle = (right - left) / 2; +	int b = get_majority_element(a, left, left + middle); +	int c = get_majority_element(a, left + middle + 1, right); +	int d = conquer(a, b, c, left, right); +	return d;  } - -//int linear_search(const vector<int> &a, int x) { -//	for (size_t i = 0; i < a.size(); ++i) { -//		if (a[i] == x) -//			return i; -//	} -//	return -1; -//} - -//test(binarysearch, search1) { -//	vector<long> a { 1, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 8), 2); -//} -// -//test(binarysearch, search2) { -//	vector<long> a { 1, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 1), 0); -//} -// -//test(binarysearch, search3) { -//	vector<long> a { 1, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 23), -1); -//} -// -//test(binarysearch, search4) { -//	vector<long> a { 1, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 11), -1); -//} -// -//test(binarysearch, search5) { -//	vector<long> a { 3, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 2), -1); -//} -// -//test(binarysearch, search6) { -//	vector<long> a { 1, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 13), 4); -//} -// -//test(binarysearch, search7) { -//	vector<long> a { 1, 5, 8, 12, 13 }; -//	assert_eq(binary_search(a, 12), 3); +//TEST(MajorityElement, test1) { +//	vector<int> a = { 1, 1 }; +//	ASSERT_EQ(get_majority_element(a, 0, a.size()-1), 1);  //}  int main() {  	int n;  	std::cin >> n; -	vector<long> a(n); -	for (size_t i = 0; i < a.size(); i++) { +	vector<int> a(n); +	for (size_t i = 0; i < a.size(); ++i) {  		std::cin >> a[i];  	} -	int m; -	std::cin >> m; -	vector<long> b(m); -	for (int i = 0; i < m; ++i) { -		std::cin >> b[i]; -	} -	for (int i = 0; i < m; ++i) { -		//replace with the call to binary_search when implemented -		std::cout << binary_search(a, b[i]) << ' '; -	} +	std::cout << (get_majority_element(a, 0, n - 1) != -1) << '\n';  } | 
