Skip to content

Commit a4e1a10

Browse files
solves sort integers by number of 1 bits
1 parent 4b8cb65 commit a4e1a10

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@
346346
| 1342 | [Number of Steps to Reduce a Number to Zero](https://leetcode.com/problems/number-of-steps-to-reduce-a-number-to-zero) | [![Java](assets/java.png)](src/NumberOfStepsToReduceANumberToZero.java) | |
347347
| 1346 | [Check if N and It's Double Exist](https://leetcode.com/problems/check-if-n-and-its-double-exist) | [![Java](assets/java.png)](src/CheckIfNAndItsDoubleExist.java) [![Python](assets/python.png)](python/check_if_n_and_its_double_exist.py) | |
348348
| 1351 | [Count Negative Numbers In A Sorted Matrix](https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix) | [![Java](assets/java.png)](src/CountNegativeNumbersInSortedMatrix.java) | |
349-
| 1356 | [Sort Integers by Number of 1 Bits](https://leetcode.com/problems/sort-integers-by-the-number-of-1-bits) | | |
349+
| 1356 | [Sort Integers by Number of 1 Bits](https://leetcode.com/problems/sort-integers-by-the-number-of-1-bits) | [![Java](assets/java.png)](src/SortIntegersByTheNumberOf1Bits.java) | |
350350
| 1360 | [Number of Days Between Two Dates](https://leetcode.com/problems/number-of-days-between-two-dates) | | |
351351
| 1365 | [How Many Numbers Are Smaller Than Current Number](https://leetcode.com/problems/how-many-numbers-are-smaller-than-the-current-number) | | |
352352
| 1370 | [Increasing Decreasing String](https://leetcode.com/problems/increasing-decreasing-string) | | |
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.util.Arrays;
2+
import java.util.List;
3+
import java.util.stream.Collectors;
4+
5+
public class SortIntegersByTheNumberOf1Bits {
6+
public int[] sortByBits(int[] array) {
7+
List<Integer> sorted = Arrays.stream(array).boxed().sorted((a, b) -> {
8+
final int setBits1 = setBits(a), setBits2 = setBits(b);
9+
if (setBits1 == setBits2) return Integer.compare(a, b);
10+
return Integer.compare(setBits1, setBits2);
11+
}).collect(Collectors.toList());
12+
return toArray(sorted);
13+
}
14+
15+
private int[] toArray(List<Integer> array) {
16+
final int[] result = new int[array.size()];
17+
for (int index = 0 ; index < result.length ; index++) {
18+
result[index] = array.get(index);
19+
}
20+
return result;
21+
}
22+
23+
private int setBits(int number) {
24+
int setBits = 0;
25+
while (number > 0) {
26+
setBits += number & 1;
27+
number >>= 1;
28+
}
29+
return setBits;
30+
}
31+
}

0 commit comments

Comments
 (0)