Reverse bits of a given 32 bits unsigned integer.
Note:
- Note that in some languages, such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer type. They should not affect your implementation, as the integer’s internal binary representation is the same, whether it is signed or unsigned.
- In Java, the compiler represents the signed integers using 2’s complement notation. Therefore, in Example 2 above, the input represents the signed integer -3 and the output represents the signed integer -1073741825.
Follow up: If this function is called many times, how would you optimize it?
- cache can be solution but not perfect
- input range is [0 … 2^32-1] so it’s too much data for caching
- we need
2^32 - 1 * uint32_t
memory in case
- we need
- we can use cache with lru or something else..
- but worst!!
- in this case average cache hit rate wold be
memory size / 2^32 - 1
- and also we know we have to use hash funtions
- when we use hash funtions, we have to make hash key, so have to iterate all bits o(n)
- in below solution, we iterate half of n
1 | class Solution { |