本质是一个递推,时间复杂度O(n),空间复杂度O(n)。
class Solution {
public:
vector<int> countBits(int n) {
vector<int> ans(n + 1);
ans[0] = 0;
//ans[1] = 1;
for(int i = 1; i <= n; i++){
if(i & 1){
ans[i] = ans[i/2] + 1;
}
else ans[i] = ans[i/2];
}
return ans;
}
};
水水水!!!
排序,如果该数字出现三次,则第一次出现和第三次出现是同一个数字。因为排序时间复杂度为O(nlogn);空间复杂度O(1)。
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
for(int i = 0; i + 2 < nums.size(); i += 3)
{
if(nums[i] != nums[i+2])return nums[i];
}
return nums[nums.size() -1];
}
};
水水水!!!