目录
面试题 01.01. 判定字符是否唯一
解析
题解
268. 丢失的数字
解析
题解
371. 两整数之和
解析
题解
面试题 01.01. 判定字符是否唯一
面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)
解析
题解
class Solution {
public:
bool isUnique(string astr) {
// 35.专题五_位运算_判断字符是否唯一_C++
int n = astr.size();
if (n > 26) return false;
int bitMap = 0;
for (int i = 0; i < n; ++i)
{
int bit = astr[i] - 'a';
if (((bitMap >> bit) & 1) == 1) return false;
// 将当前字符添加到位图中去
bitMap |= (1 << bit);
}
return true;
}
};
268. 丢失的数字
268. 丢失的数字 - 力扣(LeetCode)
解析
题解
方法一:高斯求和
class Solution {
public:
int missingNumber(vector<int>& nums) {
// 36.专题五_位运算_丢失的数字_C++
int num_sum = 0, n = nums.size();
for (int x : nums)
num_sum += x;
int Sum = ((1 + n) * n) / 2;
return Sum - num_sum;
}
};
方法二:位运算(异或运算的运算律)
class Solution {
public:
int missingNumber(vector<int>& nums) {
// 36.专题五_位运算_丢失的数字_C++
int n = nums.size(), ret = 0;
for (int x : nums) ret ^= x;
for (int i = 0; i <= n; ++i) ret ^= i;
return ret;
}
};
371. 两整数之和
371. 两整数之和 - 力扣(LeetCode)
解析
题解
class Solution {
public:
int getSum(int a, int b) {
// 37.专题五_位运算_两整数之和_C++
while (b != 0)
{
int x = a ^ b;
unsigned int carry = (a & b) << 1;
a = x;
b = carry;
}
return a;
}
};