Leetcode1 两数之和 & Leetcode 633平方数之和

题目背景:
在这里插入图片描述========================================================================================================
算法思路:
题目要求找到目标的两个数字,返回其数组下标;
引入哈希,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;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.liang呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值