Skip to content

Added Kth largest element algorithm #10687

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

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
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()