summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/heaps_stacks_queues/kth_largest_element_spec.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/spec/heaps_stacks_queues/kth_largest_element_spec.rb b/spec/heaps_stacks_queues/kth_largest_element_spec.rb
index 5bbc0b4..49c0b70 100644
--- a/spec/heaps_stacks_queues/kth_largest_element_spec.rb
+++ b/spec/heaps_stacks_queues/kth_largest_element_spec.rb
@@ -29,6 +29,29 @@ describe "#kth_largest_element" do
numbers.sort[-k]
end
+ #def kth_largest_element(numbers, k)
+ #items = Array.new(105)
+ #numbers.each do |n|
+ #items[n] = n
+ #end
+ #items.compact[-k]
+ #end
+
+ def kth_largest_element(numbers, k)
+ return numbers[0] if numbers.size == 1
+
+ numbers.shuffle!
+ partition = numbers[0]
+ upper = numbers[1..-1].find_all { |x| x >= partition }
+
+ if upper.size >= k
+ kth_largest_element(upper, k)
+ else
+ lower = numbers[1..-1].find_all { |x| x < partition } + [partition]
+ kth_largest_element(lower, k - upper.size)
+ end
+ end
+
[
{ nums: [7, 6, 5, 4, 3, 2, 1], k: 2, x: 6 },
{ nums: [99, 99], k: 1, x: 99 },