-
Notifications
You must be signed in to change notification settings - Fork 1
/
algos.rb
71 lines (53 loc) · 1.06 KB
/
algos.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
def find_item(target, items)
items.each_with_index do |item, idx|
return idx if item == target
end
-1
end
def find_min(items)
min_item = items[0]
items.drop(1).each do |item|
min_item = min min_item, item
end
min_item
end
def find_two_min(items)
[min1, min2] = items.take 2
min1, min2 = min2, min1 if min2 < min1
items.drop(2).each do |item|
if item < min1
min2 = min1
min1 = item
elsif item < min2
min2 = item
end
end
[min1, min2]
end
def find_k_min(k, items)
min_items = items.take k
items.drop(k).each do |item|
# how long will this take ?
max, max_idx = min_items.each_with_index.max
min_items[max_idx] = item if item < max
end
min_items
end
def find_zero_sum_pair(items)
items.each_with_index do |i1, idx|
items.each do |i2|
return [i1, i2] if i1 + i2 == 0
end
end
nil
end
def find_zero_sum_pair2(items)
item_hash = {}
items.each do |item|
item_hash[item] = true
end
items.each do |item|
return [item, -item] if item_hash[-item]
end
nil
end