1356. Sort Integers by The Number of 1 Bits
Easy
You are given an integer array arr
. Sort the integers in the array in ascending order by the number of 1
's in their binary representation and in case of two or more integers have the same number of 1
's you have to sort them in ascending order.
Return the array after sorting it.
Example 1:
Input: arr = [0,1,2,3,4,5,6,7,8]
Output: [0,1,2,4,8,3,5,6,7]
Explantion: [0] is the only integer with 0 bits.
[1,2,4,8] all have 1 bit.
[3,5,6] have 2 bits.
[7] has 3 bits.
The sorted array by bits is [0,1,2,4,8,3,5,6,7]
Example 2:
Input: arr = [1024,512,256,128,64,32,16,8,4,2,1]
Output: [1,2,4,8,16,32,64,128,256,512,1024]
Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order.
Constraints:
1 <= arr.length <= 500
0 <= arr[i] <= 104
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
# Pass through array and get number of 1's bits in each number
# Store this in dict and sort using `value`
d = []
for num in arr:
d.append([num, self.countBits(num)])
def sort(item1, item2):
if item1[1] < item2[1]:
return -1
elif item1[1] > item2[1]:
return 1
else:
if item1[0] < item2[0]:
return -1
else:
return 1
d = sorted(d, key=functools.cmp_to_key(sort))
return map(lambda item: item[0],d )
def countBits(self, num: int) -> int:
count = 0
while num:
count += 1 & num
num = num >> 1
return count
Last updated