题目背景:
========================================================================================================
算法思路:
题目要求找到目标的两个数字,返回其数组下标;
引入哈希,key代表我们要找的数字;value对应其在数组中的下标
;
第一个数字:key=nums[i]
value=table[nums[i]]
第二个数字:key=target-nums[i]
value=table[target-nums[i]]
代码实现:
class Solution
{
public:
vector<int>twoSum(vector<int>& nums, int target)
{
int m = nums.size();
vector<int>ret(2, 0);//ret存放的是对应目标数字的下标
unordered_map<int, int>table;//哈希 key-value结构
for (int i = 0; i <m; i++)
{
if (table.count(target - nums[i]) > 0)//目标和的另一个数字在哈希集合里出现过
{
ret[0] = i, ret[1] = table[target - nums[i]];
return ret;
}
table[nums[i]] = i;//第一个数字对应的value是i
}
return ret;
}
};在这里插入代码片
leetcode 633 平方数之和
给定一个非负整数,你要判断是否存在两个整数a和b,使得a2+b2=c
;
示例:
输入:c=5
输出: true 解释 1*1+2*2=5
C++实现:
//平方数之和
class Solution
{
public:
bool judgeSquareSum(int c)
{
long left = 0;
long right = (int)sqrt(c); // 求平方根函数 5开平方是2;
while (left <= right)
{
long sum = left * left + right * right;
if (sum == c)
{
return true;
}
else if (sum > c)right--;
else left++;
}
return false;
}
};