Skip to content
Merged
Changes from 6 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()