题目一
力扣:1. 两数之和
思路:模拟
1、target是由两个数构成的并且两个数是唯一的答案,我枚举数组中任意一个数之后,只要余下的数出现在了数组里面,就意味着我找到答案了。
2、怎么快速的知道要的数到底在不在,用Hash表存上就行,因为答案要的是出现的位置,所以用unordered_map存储,key是数组中的值,value是位置。
细节
1、要的是数组中两个不同位置上的数,所以需要判断位置是否一致。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> item;
int n = nums.size();
vector<int> ans;
for (int i = 0; i < n; i++) {
item.insert(make_pair(nums[i], i));
}
for (int i = 0; i < n; i++) {
int tmp = target - nums[i];
if (item.count(tmp) > 0 && item[tmp] != i) {
ans.push_back(i);
ans.push_back(item[tmp]);
return ans;
}
}
return ans;
}
};
所有代码均以通过力扣测试
(经过多次测试最短时间为):
题目二
力扣:342. 4的幂
思路:位运算
1、不能是0,4^0=1
2、其二进制表示中只能有一个1
3、2^3=8这样奇数次幂都不行。我们就拿1、2、3、4来说,1、4可以,2不行,3不在考虑范围,所以1%3=1,2%3=2,所以%3等于1的,才是所求,进一步验证后成立。
代码
class Solution {
public:
bool isPowerOfFour(int n) {
return n > 0 && (n&n - 1) == 0 && (n % 3) == 1;
}
};
所有代码均以通过力扣测试
(经过多次测试最短时间为):