Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7aa0d60

Browse files
add 1387
1 parent c2fc277 commit 7aa0d60

File tree

3 files changed

+108
-0
lines changed

3 files changed

+108
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ _If you like this project, please leave me a star._ ★
88

99
| # | Title | Solutions | Video | Difficulty | Tag
1010
|-----|----------------|---------------|--------|-------------|-------------
11+
|1387|[Sort Integers by The Power Value](https://leetcode.com/problems/sort-integers-by-the-power-value/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1387.java) | |Medium|Sort, Graph|
1112
|1386|[Cinema Seat Allocation](https://leetcode.com/problems/cinema-seat-allocation/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1386.java) | |Medium|Array, Greedy|
1213
|1385|[Find the Distance Value Between Two Arrays](https://leetcode.com/problems/find-the-distance-value-between-two-arrays/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1385.java) | |Easy|Array|
1314
|1382|[Balance a Binary Search Tree](https://leetcode.com/problems/balance-a-binary-search-tree/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1382.java) | |Medium|Binary Search Tree|
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.fishercoder.solutions;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
/**
8+
* 1387. Sort Integers by The Power Value
9+
*
10+
* The power of an integer x is defined as the number of steps needed to transform x into 1 using the following steps:
11+
* if x is even then x = x / 2
12+
* if x is odd then x = 3 * x + 1
13+
*
14+
* For example, the power of x = 3 is 7 because 3 needs 7 steps to become 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1).
15+
* Given three integers lo, hi and k. The task is to sort all integers in the interval [lo, hi] by the power value in ascending order, if two or more integers have the same power value sort them by ascending order.
16+
* Return the k-th integer in the range [lo, hi] sorted by the power value.
17+
* Notice that for any integer x (lo <= x <= hi) it is guaranteed that x will transform into 1 using these steps and that the power of x is will fit in 32 bit signed integer.
18+
*
19+
* Example 1:
20+
* Input: lo = 12, hi = 15, k = 2
21+
* Output: 13
22+
* Explanation: The power of 12 is 9 (12 --> 6 --> 3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)
23+
* The power of 13 is 9
24+
* The power of 14 is 17
25+
* The power of 15 is 17
26+
* The interval sorted by the power value [12,13,14,15]. For k = 2 answer is the second element which is 13.
27+
* Notice that 12 and 13 have the same power value and we sorted them in ascending order. Same for 14 and 15.
28+
*
29+
* Example 2:
30+
* Input: lo = 1, hi = 1, k = 1
31+
* Output: 1
32+
*
33+
* Example 3:
34+
* Input: lo = 7, hi = 11, k = 4
35+
* Output: 7
36+
* Explanation: The power array corresponding to the interval [7, 8, 9, 10, 11] is [16, 3, 19, 6, 14].
37+
* The interval sorted by power is [8, 10, 11, 7, 9].
38+
* The fourth number in the sorted array is 7.
39+
*
40+
* Example 4:
41+
* Input: lo = 10, hi = 20, k = 5
42+
* Output: 13
43+
*
44+
* Example 5:
45+
* Input: lo = 1, hi = 1000, k = 777
46+
* Output: 570
47+
*
48+
* Constraints:
49+
* 1 <= lo <= hi <= 1000
50+
* 1 <= k <= hi - lo + 1
51+
* */
52+
public class _1387 {
53+
public static class Solution1 {
54+
public int getKth(int lo, int hi, int k) {
55+
List<int[]> power = new ArrayList<>();
56+
for (int i = lo; i <= hi; i++) {
57+
power.add(new int[]{getSteps(i), i});
58+
}
59+
Collections.sort(power, (a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]);
60+
return power.get(k - 1)[1];
61+
}
62+
63+
private int getSteps(int number) {
64+
int steps = 0;
65+
while (number != 1) {
66+
if (number % 2 == 0) {
67+
number /= 2;
68+
} else {
69+
number = 3 * number + 1;
70+
}
71+
steps++;
72+
}
73+
return steps;
74+
}
75+
}
76+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.fishercoder;
2+
3+
import com.fishercoder.solutions._1387;
4+
import org.junit.BeforeClass;
5+
import org.junit.Test;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
public class _1387Test {
10+
private static _1387.Solution1 solution1;
11+
12+
@BeforeClass
13+
public static void setup() {
14+
solution1 = new _1387.Solution1();
15+
}
16+
17+
@Test
18+
public void test1() {
19+
assertEquals(13, solution1.getKth(12, 15, 2));
20+
}
21+
22+
@Test
23+
public void test2() {
24+
assertEquals(1, solution1.getKth(1, 1, 1));
25+
}
26+
27+
@Test
28+
public void test3() {
29+
assertEquals(7, solution1.getKth(7, 11, 4));
30+
}
31+
}

0 commit comments

Comments
 (0)