leetcode
programing菜鸟
喜欢C/C++, Linux,数据结构的朋友们可以关注我,不会让你失望的。
展开
-
leetcode-201_2021_10_17
leetcode-201_颠倒二进制位法一:经典做法,也是最简单的做法。创建一个新的对象ret来维护颠倒后的结果。遍历n的32位,如果第i位为1,那么ret的第(31-i)位为1。有一个小细节就是如果n的最高位的1已经被遍历,那么就可以提前结束,因为后面全是0。class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t ret = 0; for(int i = 0; i < 32原创 2021-10-17 13:42:55 · 128 阅读 · 0 评论 -
java中的HeightOneBit函数
我在leetcode中看见了一个有意思的函数,即java中的HeightOneBit函数。该函数接受一个整数,保留该整数的二进制最高位的1,其他的位清0。由于我对java不了解,我写了一份C++的版本。int HeightOneBit(int i){ i |= (i >> 1); i |= (i >> 2); i |= (i >> 4); i |= (i >> 8); i |= (i >> 16); r原创 2021-10-17 12:53:52 · 210 阅读 · 0 评论 -
leetcode_191_2021-10-15
leetcode_191_位1的个数这是一道很简单的题目,这里我要介绍对它的优化解题方案。法一:直接遍历32位,利用位运算找到有1的位,然后利用oneNums来维护。class Solution {public: int hammingWeight(uint32_t n) { int oneNums = 0; for(int i = 0; i < 32; ++i){ //直接遍历n的每一位 if((n >> i) &原创 2021-10-15 18:11:44 · 182 阅读 · 0 评论 -
leetcode1720_2021-10-14
leetcode1720_解码异或后的数组这是一道非常简单的题目。写这篇博客的目的主要是介绍一下异或符号的特性。关于异或运算的几条基本定理:异或满足结合律,(a ^ b) ^ c = a ^ (b ^ c)异或满足交换律,a ^ b = b ^ a任意数与自身异或得0,a^a = 0任意数异或0的到自身,a^0 = a那么encoded[i] = arr[i] ^ arr[i + 1],则有 arr[i + 1] = encoded[i] ^ ar[i].class Solution {p原创 2021-10-14 10:50:37 · 71 阅读 · 0 评论 -
leetcode1863_2021-10-14
leetcode1863 找出所有自己的异或总和再求和法一:数组中的每个数字有选取和不选取两种状态,设数组大小为n。我们使用一个整数的前n位来模拟每个子集的选取状态,这个整数的大小由0(空集)到 (1 << n) - 1(全集)。然后我们再遍历数组,同时检查这个整数的该位,如果为1,就异或上该位;为0则直接跳过。class Solution {public: int subsetXORSum(vector<int>& nums) { int原创 2021-10-14 10:39:46 · 149 阅读 · 0 评论 -
leetcode_1365
leetcode_1365有多少小于当前数字的数字:法一利用条件每个nums[i] <= 100,可以创建一个101空间的频率数组,利用计数排序算出每个数字出现的频率。然后小于当前数字的数字个数就是频率数组中以该数字为下标的前面的所有项数和。class Solution {public: vector<int> smallerNumbersThanCurrent(vector<int>& nums) { vector<int>原创 2021-10-12 23:39:28 · 132 阅读 · 0 评论 -
leetcode_1470_2021.10.12
leetcode1470,重新排列数组。法一:这道题目最明显的做法就是重新开辟一个数组,然后将旧数组的数据按照自己的索引拷贝到新数组中去。空间复杂度O(N)。class Solution {public: vector<int> shuffle(vector<int>& nums, int n) { vector<int> v; v.resize(2 * n); //开一个2n大小的数组. for(int i原创 2021-10-12 20:08:24 · 123 阅读 · 0 评论