diff options
| author | mo <mokha@cisco.com> | 2017-08-20 22:37:51 -0600 |
|---|---|---|
| committer | mo <mokha@cisco.com> | 2017-08-20 22:37:51 -0600 |
| commit | c658e88544fa3bb87beb620f23f1bcb1437ed04a (patch) | |
| tree | 71554a5c663e5086e948dcc636c0018fd189a531 | |
| parent | 8d40d24fc15c3fdb20dd33568e2b6e956ec672a1 (diff) | |
study bcc32 solution.
| -rw-r--r-- | spec/heaps_stacks_queues/kth_largest_element_spec.rb | 23 |
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 }, |
