From 22f3af334f390fa8646a9be02366b1ebccd56aa8 Mon Sep 17 00:00:00 2001 From: RoyCoding8 <92641125+RoyCoding8@users.noreply.github.com> Date: Mon, 2 Oct 2023 09:53:08 +0530 Subject: [PATCH 1/5] Added C++ solution to kth Largest Element in O(n) The previous solution was in O(nlogn), added a more efficient O(n) solution with randomized quickselect --- .../Java/Solution_cpp_O(n).cpp | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp diff --git a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp b/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp new file mode 100644 index 0000000000..8bd19363d9 --- /dev/null +++ b/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp @@ -0,0 +1,37 @@ +#include +#define ll long long +using namespace std; + +ll partition(ll a[],int l,int r){ + int k=l+rand()%(r-l+1),i=l; + swap(a[l],a[k]); + ll key=a[l]; + for(int j=l+1;j<=r;j++){ + if(a[j]<=key){ + i++; + swap(a[i],a[j]); + } + } + swap(a[l],a[i]); + return i; +} + +ll kth_largest(ll a[],ll l,ll r,ll k){ + if(k>r-l+1||k<=0) return LLONG_MAX; + int p=partition(a,l,r); + if(p==r-k+1) return a[p]; + if(p>r-k+1) return kth_largest(a,l,p-1,k-r+p-1); + return kth_largest(a,p+1,r,k); +} + +int main(){ + int n,k; + cin>>n>>k; + srand(time_t(NULL)); + ll a[n]; + for(int i=0;i>a[i]; + ll ans=kth_largest(a,0,n-1,k); + if(ans==LLONG_MAX) cout<<"No Kth largest element\n"; + else cout< Date: Mon, 2 Oct 2023 09:59:08 +0530 Subject: [PATCH 2/5] Update Solution_cpp_O(n).cpp --- search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp b/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp index 8bd19363d9..1497baeb84 100644 --- a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp +++ b/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp @@ -2,7 +2,7 @@ #define ll long long using namespace std; -ll partition(ll a[],int l,int r){ +int partition(ll a[],int l,int r){ int k=l+rand()%(r-l+1),i=l; swap(a[l],a[k]); ll key=a[l]; @@ -34,4 +34,4 @@ int main(){ if(ans==LLONG_MAX) cout<<"No Kth largest element\n"; else cout< Date: Mon, 2 Oct 2023 10:02:44 +0530 Subject: [PATCH 3/5] Revert "Update Solution_cpp_O(n).cpp" This reverts commit ece4029f1137b8832fa13006a730b5b716e90a35. --- search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp b/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp index 1497baeb84..8bd19363d9 100644 --- a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp +++ b/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp @@ -2,7 +2,7 @@ #define ll long long using namespace std; -int partition(ll a[],int l,int r){ +ll partition(ll a[],int l,int r){ int k=l+rand()%(r-l+1),i=l; swap(a[l],a[k]); ll key=a[l]; @@ -34,4 +34,4 @@ int main(){ if(ans==LLONG_MAX) cout<<"No Kth largest element\n"; else cout< Date: Mon, 2 Oct 2023 10:12:45 +0530 Subject: [PATCH 4/5] Added files for Cpp and py --- search/binary_search/C/binarySearch.c | 51 +++++++------ .../Solution_O(n).cpp} | 72 +++++++++---------- .../kth_largest_in_array/Python/Solution.py | 32 +++++++++ 3 files changed, 96 insertions(+), 59 deletions(-) rename search/kth_largest_in_array/{Java/Solution_cpp_O(n).cpp => C++/Solution_O(n).cpp} (95%) create mode 100644 search/kth_largest_in_array/Python/Solution.py diff --git a/search/binary_search/C/binarySearch.c b/search/binary_search/C/binarySearch.c index 9416dd16f5..9378bd3be3 100644 --- a/search/binary_search/C/binarySearch.c +++ b/search/binary_search/C/binarySearch.c @@ -1,32 +1,37 @@ #include +int main() +{ + int c, first, last, middle, n, search, array[100]; -int binarySearch(int arr[], int start, int end, int x) { + printf("Enter number of elements\n"); + scanf("%d", &n); - if (start <= end) { + printf("Enter %d integers\n", n); - int mid = start + (end - start) / 2; + for (c = 0; c < n; c++) + scanf("%d", &array[c]); - if (arr[mid] == x) - return mid; + printf("Enter value to find\n"); + scanf("%d", &search); - if (arr[mid] > x) - return binarySearch(arr, start, mid - 1, x); + first = 0; + last = n - 1; + middle = (first+last)/2; - return binarySearch(arr, mid + 1, end, x); - } - return -1; -} + while (first <= last) { + if (array[middle] < search) + first = middle + 1; + else if (array[middle] == search) { + printf("%d found at location %d.\n", search, middle+1); + break; + } + else + last = middle - 1; -int main() -{ - int arr[] = { 2, 3, 7, 8, 78, 99, 102, 5555 }; - int x = 9; - int result = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]), x); - - if (result == -1) { - printf("Element not present"); - } - else { - printf("Element found at index %d", result); - } + middle = (first + last)/2; + } + if (first > last) + printf("Not found! %d isn't present in the list.\n", search); + + return 0; } diff --git a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp b/search/kth_largest_in_array/C++/Solution_O(n).cpp similarity index 95% rename from search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp rename to search/kth_largest_in_array/C++/Solution_O(n).cpp index 8bd19363d9..33b27f8923 100644 --- a/search/kth_largest_in_array/Java/Solution_cpp_O(n).cpp +++ b/search/kth_largest_in_array/C++/Solution_O(n).cpp @@ -1,37 +1,37 @@ -#include -#define ll long long -using namespace std; - -ll partition(ll a[],int l,int r){ - int k=l+rand()%(r-l+1),i=l; - swap(a[l],a[k]); - ll key=a[l]; - for(int j=l+1;j<=r;j++){ - if(a[j]<=key){ - i++; - swap(a[i],a[j]); - } - } - swap(a[l],a[i]); - return i; -} - -ll kth_largest(ll a[],ll l,ll r,ll k){ - if(k>r-l+1||k<=0) return LLONG_MAX; - int p=partition(a,l,r); - if(p==r-k+1) return a[p]; - if(p>r-k+1) return kth_largest(a,l,p-1,k-r+p-1); - return kth_largest(a,p+1,r,k); -} - -int main(){ - int n,k; - cin>>n>>k; - srand(time_t(NULL)); - ll a[n]; - for(int i=0;i>a[i]; - ll ans=kth_largest(a,0,n-1,k); - if(ans==LLONG_MAX) cout<<"No Kth largest element\n"; - else cout< +#define ll long long +using namespace std; + +ll partition(ll a[],int l,int r){ + int k=l+rand()%(r-l+1),i=l; + swap(a[l],a[k]); + ll key=a[l]; + for(int j=l+1;j<=r;j++){ + if(a[j]<=key){ + i++; + swap(a[i],a[j]); + } + } + swap(a[l],a[i]); + return i; +} + +ll kth_largest(ll a[],ll l,ll r,ll k){ + if(k>r-l+1||k<=0) return LLONG_MAX; + int p=partition(a,l,r); + if(p==r-k+1) return a[p]; + if(p>r-k+1) return kth_largest(a,l,p-1,k-r+p-1); + return kth_largest(a,p+1,r,k); +} + +int main(){ + int n,k; + cin>>n>>k; + srand(time_t(NULL)); + ll a[n]; + for(int i=0;i>a[i]; + ll ans=kth_largest(a,0,n-1,k); + if(ans==LLONG_MAX) cout<<"No Kth largest element\n"; + else cout<r-l+1 or k<=0: + return INF + p = partition(a,l,r) + if p==r-k+1: + return a[p] + if p>r-k+1: + return kth_largest(a,l,p-1,k-r+p-1) + return kth_largest(a,p+1,r,k) + +n,k = map(int,input().split()) +a = list(map(int,input().split())) +ans = kth_largest(a,0,n-1,k) +if ans == INF: + print('No Kth largest element') +else: + print(ans) \ No newline at end of file From d365dfa8348aef898e4bbd5fb9a6d4cbea4ceb9c Mon Sep 17 00:00:00 2001 From: RoyCoding8 <92641125+RoyCoding8@users.noreply.github.com> Date: Mon, 2 Oct 2023 10:27:27 +0530 Subject: [PATCH 5/5] Update binarySearch.c --- search/binary_search/C/binarySearch.c | 51 ++++++++++++--------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/search/binary_search/C/binarySearch.c b/search/binary_search/C/binarySearch.c index 9378bd3be3..9416dd16f5 100644 --- a/search/binary_search/C/binarySearch.c +++ b/search/binary_search/C/binarySearch.c @@ -1,37 +1,32 @@ #include -int main() -{ - int c, first, last, middle, n, search, array[100]; - - printf("Enter number of elements\n"); - scanf("%d", &n); - printf("Enter %d integers\n", n); +int binarySearch(int arr[], int start, int end, int x) { - for (c = 0; c < n; c++) - scanf("%d", &array[c]); + if (start <= end) { - printf("Enter value to find\n"); - scanf("%d", &search); + int mid = start + (end - start) / 2; - first = 0; - last = n - 1; - middle = (first+last)/2; + if (arr[mid] == x) + return mid; - while (first <= last) { - if (array[middle] < search) - first = middle + 1; - else if (array[middle] == search) { - printf("%d found at location %d.\n", search, middle+1); - break; - } - else - last = middle - 1; + if (arr[mid] > x) + return binarySearch(arr, start, mid - 1, x); - middle = (first + last)/2; - } - if (first > last) - printf("Not found! %d isn't present in the list.\n", search); + return binarySearch(arr, mid + 1, end, x); + } + return -1; +} - return 0; +int main() +{ + int arr[] = { 2, 3, 7, 8, 78, 99, 102, 5555 }; + int x = 9; + int result = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]), x); + + if (result == -1) { + printf("Element not present"); + } + else { + printf("Element found at index %d", result); + } }