Skip to content

Commit 1a945a6

Browse files
add 1558
1 parent 19ac520 commit 1a945a6

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-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+
|1558|[Minimum Numbers of Function Calls to Make Target Array](https://leetcode.com/problems/minimum-numbers-of-function-calls-to-make-target-array/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1558.java) ||Medium|Greedy|
1112
|1557|[Minimum Number of Vertices to Reach All Nodes](https://leetcode.com/problems/minimum-number-of-vertices-to-reach-all-nodes/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1557.java) ||Medium|Graph|
1213
|1556|[Thousand Separator](https://leetcode.com/problems/thousand-separator/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1556.java) ||Easy|String|
1314
|1551|[Minimum Operations to Make Array Equal](https://leetcode.com/problems/minimum-operations-to-make-array-equal/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1551.java) | [:tv:](https://youtu.be/A-i2sxmBqAA)|Medium|Math|
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.Arrays;
4+
5+
public class _1558 {
6+
public static class Solution1 {
7+
public int minOperations(int[] nums) {
8+
Arrays.sort(nums);
9+
int ops = 0;
10+
while (!allZero(nums)) {
11+
if (allEvenAndNonZeroes(nums)) {
12+
nums = half(nums);
13+
ops++;
14+
} else if (hasOdds(nums)) {
15+
int[] result = new int[nums.length];
16+
for (int i = 0; i < nums.length; i++) {
17+
if (nums[i] % 2 != 0) {
18+
result[i] = nums[i] - 1;
19+
ops++;
20+
} else {
21+
result[i] = nums[i];
22+
}
23+
}
24+
nums = result;
25+
} else {
26+
int[] result = new int[nums.length];
27+
for (int i = 0; i < nums.length; i++) {
28+
if (nums[i] != 0) {
29+
result[i] = nums[i] / 2;
30+
} else {
31+
result[i] = nums[i];
32+
}
33+
}
34+
nums = result;
35+
ops++;
36+
}
37+
}
38+
return ops;
39+
}
40+
41+
private boolean hasOdds(int[] nums) {
42+
for (int i : nums) {
43+
if (i % 2 != 0) {
44+
return true;
45+
}
46+
}
47+
return false;
48+
}
49+
50+
private int[] half(int[] nums) {
51+
int[] result = new int[nums.length];
52+
for (int i = 0; i < nums.length; i++) {
53+
result[i] = nums[i] / 2;
54+
}
55+
return result;
56+
}
57+
58+
private boolean allEvenAndNonZeroes(int[] nums) {
59+
for (int i : nums) {
60+
if (i % 2 != 0 || i == 0) {
61+
return false;
62+
}
63+
}
64+
return true;
65+
}
66+
67+
private boolean allZero(int[] nums) {
68+
for (int i : nums) {
69+
if (i != 0) {
70+
return false;
71+
}
72+
}
73+
return true;
74+
}
75+
}
76+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.fishercoder;
2+
3+
import com.fishercoder.solutions._1558;
4+
import org.junit.BeforeClass;
5+
import org.junit.Test;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
public class _1558Test {
10+
private static _1558.Solution1 solution1;
11+
private static int[] nums;
12+
13+
@BeforeClass
14+
public static void setup() {
15+
solution1 = new _1558.Solution1();
16+
}
17+
18+
@Test
19+
public void test1() {
20+
nums = new int[]{1, 5};
21+
assertEquals(5, solution1.minOperations(nums));
22+
}
23+
24+
@Test
25+
public void test2() {
26+
nums = new int[]{2, 2};
27+
assertEquals(3, solution1.minOperations(nums));
28+
}
29+
30+
@Test
31+
public void test3() {
32+
nums = new int[]{4, 2, 5};
33+
assertEquals(6, solution1.minOperations(nums));
34+
}
35+
36+
@Test
37+
public void test4() {
38+
nums = new int[]{3, 2, 2, 4};
39+
assertEquals(7, solution1.minOperations(nums));
40+
}
41+
42+
@Test
43+
public void test5() {
44+
nums = new int[]{2, 4, 8, 16};
45+
assertEquals(8, solution1.minOperations(nums));
46+
}
47+
48+
}

0 commit comments

Comments
 (0)