Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Kth largest element algorithm #10687

Merged
merged 24 commits into from
Oct 26, 2023
Merged
Changes from 5 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e6c2be5
neha3423
neha3423 Oct 19, 2023
93f2d3e
neha3423
neha3423 Oct 19, 2023
53fb687
neha3423
neha3423 Oct 19, 2023
a50bd08
Merge branch 'TheAlgorithms:master' into master
neha3423 Oct 19, 2023
d78fa11
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 19, 2023
bd6d47c
neha3423
neha3423 Oct 23, 2023
2ce0e9c
neha3423
neha3423 Oct 23, 2023
41312a1
neha3423
neha3423 Oct 23, 2023
b4e58a8
Merge branch 'TheAlgorithms:master' into master
neha3423 Oct 23, 2023
add638b
Merge branch 'master' of https://github.com/neha3423/Python
neha3423 Oct 23, 2023
0b19aae
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 23, 2023
9e312fa
neha323
neha3423 Oct 23, 2023
36490ef
Merge branch 'master' of https://github.com/neha3423/Python
neha3423 Oct 23, 2023
0cb88d4
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 23, 2023
b76a792
neha3423
neha3423 Oct 23, 2023
ebd88b9
Merge branch 'master' of https://github.com/neha3423/Python
neha3423 Oct 23, 2023
3bdaa1f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 23, 2023
bb6a1a8
neha3423
neha3423 Oct 23, 2023
7bb2f6b
Merge branch 'master' of https://github.com/neha3423/Python
neha3423 Oct 23, 2023
fb5c506
neha3423
neha3423 Oct 23, 2023
2adea82
neha3423
neha3423 Oct 23, 2023
f750a7e
neha3423
neha3423 Oct 23, 2023
49fdc86
Added test case for tuple
neha3423 Oct 23, 2023
7d35911
Update kth_largest_element.py
cclauss Oct 26, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions data_structures/arrays/kth_largest_element.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"""
Given an array of integers and an integer k, find the kth largest element in the array

https://stackoverflow.com/questions/251781/how-to-find-the-kth-largest-element-in-an-unsorted-array-of-length-n-in-on
"""


def partition(arr, low, high):
"""
Partitions list based on the pivot element
Args:
arr: The list to be partitioned
low: The lower index of the list
high: The higher index of the list
Returns:
int: The index of pivot element after partitioning

Examples:
>>> partition([3,1,4,5,9,2,6,5,3,5],0,9)
4
>>> partition([7,1,4,5,9,2,6,5,8],0,8)
1
"""
pivot = arr[high]
i = low - 1
for j in range(low, high):
if arr[j] >= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return i + 1


def kth_largest_element(arr, k):
"""
Finds the kth largest element in a list.

Args:
nums : The list of numbers.
k : The position of the desired kth largest element.

Returns:
int: The kth largest element.

Examples:
>>> kth_largest_element([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5], 3)
5
>>> kth_largest_element([2, 5, 6, 1, 9, 3, 8, 4, 7, 3, 5], 1)
9
>>> kth_largest_element([9, 1, 3, 6, 7, 9, 8, 4, 2, 4, 9], 11)
1
>>> kth_largest_element([1, 2, 4, 3, 5, 9, 7, 6, 5, 9, 3], 0)
'Invalid value of k'
"""
if not 1 <= k <= len(arr):
return "Invalid value of k"
low, high = 0, len(arr) - 1
while low <= high:
if low > len(arr) - 1 or high < 0:
return "Invalid value of k"
pivot_index = partition(arr, low, high)
if pivot_index == k - 1:
return arr[pivot_index]
elif pivot_index > k - 1:
high = pivot_index - 1
else:
low = pivot_index + 1
return "Kth largest element not found"


if __name__ == "__main__":
import doctest

doctest.testmod()