|
1 | 1 | # How to find common elements in three sorted array?
|
2 | 2 |
|
3 |
| - |
4 | 3 | def find_common_elements(ar1, ar2, ar3)
|
5 |
| - common = [] |
6 |
| - l1 = ar1.length |
7 |
| - l2 = ar2.length |
8 |
| - l3 = ar3.length |
9 |
| - i,j,k = 0,0,0 |
10 |
| - common = [] |
11 |
| - while i<l1 && j<l2 && k<l3 |
12 |
| - if (ar1[i] == ar2[j] && ar2[j] == ar3[k]) |
13 |
| - common.push ar1[i] |
14 |
| - i += 1 |
15 |
| - j += 1 |
16 |
| - k += 1 |
17 |
| - elsif(ar1[i] < ar2[j]) |
18 |
| - i += 1 |
19 |
| - elsif (ar2[j] < ar3[k]) |
20 |
| - j += 1 |
21 |
| - else |
22 |
| - k += 1 |
23 |
| - end |
24 |
| - end |
25 |
| - common |
| 4 | + common = [] |
| 5 | + l1 = ar1.length |
| 6 | + l2 = ar2.length |
| 7 | + l3 = ar3.length |
| 8 | + i = 0 |
| 9 | + j = 0 |
| 10 | + k = 0 |
| 11 | + common = [] |
| 12 | + while i < l1 && j < l2 && k < l3 |
| 13 | + if ar1[i] == ar2[j] && ar2[j] == ar3[k] |
| 14 | + common.push ar1[i] |
| 15 | + i += 1 |
| 16 | + j += 1 |
| 17 | + k += 1 |
| 18 | + elsif ar1[i] < ar2[j] |
| 19 | + i += 1 |
| 20 | + elsif ar2[j] < ar3[k] |
| 21 | + j += 1 |
| 22 | + else |
| 23 | + k += 1 |
| 24 | + end |
| 25 | + end |
| 26 | + common |
26 | 27 | end
|
27 | 28 |
|
28 |
| - |
29 |
| - FIXNUM_MIN = -(2**(0.size * 8 -2)) |
| 29 | +FIXNUM_MIN = -(2**(0.size * 8 - 2)) |
30 | 30 |
|
31 | 31 | def find_common_with_duplicates(ar1, ar2, ar3)
|
32 |
| - common = [] |
33 |
| - l1 = ar1.length - 1 |
34 |
| - l2 = ar2.length - 1 |
35 |
| - l3 = ar3.length - 1 |
36 |
| - i,j,k = 0,0,0 |
37 |
| - prev1, prev2, prev3 = FIXNUM_MIN, FIXNUM_MIN, FIXNUM_MIN |
38 |
| - while i<l1 && j<l2 && k<l3 |
39 |
| - while (ar1[i] == prev1 && i<l1) |
40 |
| - i += 1 |
41 |
| - end |
42 |
| - while(ar2[j] == prev2 && j < l2) |
43 |
| - j += 1 |
44 |
| - end |
45 |
| - while(ar3[k] == prev3 && k < l3) |
46 |
| - k += 1 |
47 |
| - end |
| 32 | + common = [] |
| 33 | + l1 = ar1.length - 1 |
| 34 | + l2 = ar2.length - 1 |
| 35 | + l3 = ar3.length - 1 |
| 36 | + i = 0 |
| 37 | + j = 0 |
| 38 | + k = 0 |
| 39 | + prev1 = FIXNUM_MIN |
| 40 | + prev2 = FIXNUM_MIN |
| 41 | + prev3 = FIXNUM_MIN |
| 42 | + while i < l1 && j < l2 && k < l3 |
| 43 | + i += 1 while ar1[i] == prev1 && i < l1 |
| 44 | + j += 1 while ar2[j] == prev2 && j < l2 |
| 45 | + k += 1 while ar3[k] == prev3 && k < l3 |
48 | 46 |
|
49 |
| - puts [i,j,k].to_s |
| 47 | + puts [i, j, k].to_s |
50 | 48 |
|
51 |
| - if(ar1[i] == ar2[j] && ar2[j] == ar3[k]) |
52 |
| - common << ar1[i] |
53 |
| - prev1, prev2, prev3 = ar1[i], ar1[i], ar1[i] |
54 |
| - i = i + 1 |
55 |
| - j = j + 1 |
56 |
| - k = k + 1 |
57 |
| - elsif ar1[i] < ar2[j] |
58 |
| - prev1 = ar1[i] |
59 |
| - i += 1 |
60 |
| - elsif (ar2[j] < ar3[k]) |
61 |
| - prev2 = ar2[j] |
62 |
| - j += 1 |
63 |
| - else |
64 |
| - prev3 = ar3[k] |
65 |
| - k += 1 |
66 |
| - end |
67 |
| - end |
68 |
| - common |
| 49 | + if ar1[i] == ar2[j] && ar2[j] == ar3[k] |
| 50 | + common << ar1[i] |
| 51 | + prev1 = ar1[i] |
| 52 | + prev2 = ar1[i] |
| 53 | + prev3 = ar1[i] |
| 54 | + i += 1 |
| 55 | + j += 1 |
| 56 | + k += 1 |
| 57 | + elsif ar1[i] < ar2[j] |
| 58 | + prev1 = ar1[i] |
| 59 | + i += 1 |
| 60 | + elsif ar2[j] < ar3[k] |
| 61 | + prev2 = ar2[j] |
| 62 | + j += 1 |
| 63 | + else |
| 64 | + prev3 = ar3[k] |
| 65 | + k += 1 |
| 66 | + end |
| 67 | + end |
| 68 | + common |
69 | 69 | end
|
70 |
| -ar1 = [1, 5, 10, 20, 40, 80, 80, 80, 80 ] |
| 70 | +ar1 = [1, 5, 10, 20, 40, 80, 80, 80, 80] |
71 | 71 | ar2 = [6, 7, 20, 80, 80, 80, 100]
|
72 | 72 | ar3 = [3, 4, 15, 20, 30, 70, 80, 120, 120, 120]
|
73 | 73 |
|
74 | 74 | puts find_common_with_duplicates(ar1, ar2, ar3).to_s
|
75 | 75 |
|
76 |
| - |
77 | 76 | # Load Stock pricing:
|
0 commit comments