leetcode 338
题目描述
338. 比特位计数
给你一个整数 n
,对于 0 <= i <= n
中的每个 i
,计算其二进制表示中 1
的个数 ,返回一个长度为 n + 1
的数组 ans
作为答案。
示例 1:
1 |
|
解题思路
- 迭代,遍历每个元素,依次获取
执行用时:12 ms, 在所有 Java 提交中击败了6.33%的用户
内存消耗:45.1 MB, 在所有 Java 提交中击败了96.57%的用户
通过测试用例:15 / 15
将除法和取余运算修改为位运算
执行用时:5 ms, 在所有 Java 提交中击败了18.58%的用户
内存消耗:45.6 MB, 在所有 Java 提交中击败了37.43%的用户
通过测试用例:15 / 15
时间 O(n*logn)
空间 O(1)
1 |
|
- 找规律:可以发现,把数字分为两种情况,奇数和偶数
- 奇数:n中1的个数为n-1的个数+1
- 偶数:末尾一定为0,对应的1的个数为去掉末尾0的个数
执行用时:1 ms, 在所有 Java 提交中击败了99.98%的用户
内存消耗:45.5 MB, 在所有 Java 提交中击败了52.85%的用户
通过测试用例:15 / 15
时间 O(n)
空间 O(1)
1 |
|
leetcode 338
https://kkkkkong.github.io/posts/2888.html