算法思想 Day 01

算法思想

1.两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路一

​ 定义一个索引i遍历出nums中的元素,判断列表中是否有符合 target - nums[i]的值,有的话返回对应值的索引sums.index(target - sums[i])

class Solution():
    def twoSum(self, nums, target):
        for i in range(len(nums)):
            if (target - nums[i]) in nums:
                j = nums.index(target-nums[i])
                if i == j:  # 判断两次索引是否代表同一个值
                    continue  # 代表值相同 开始下一次循环
                else:
                    return [i, j]  # 返回结果
            else:  # 值如果只不在sums里 则开始下一个循环
                continue  # pass
思路二

​ 构建空字典,用去重的方法返回对应索引 # 列表同样可以

class Solution:
    def twoSum(self, nums, target):
        dic = {}  # 构建一个空字典用来存储数据
        lens = len(nums)  # nums的长度
        for i in range(lens):  # 遍历nums列表
            if target - nums[i] not in dic:  # 往空字典里添加 target-nums[i]
                dic[nums[i]] = i  # 第一个 正确值 对应的 索引
            else:  # 如果值已经存在 则返回第一次出现的 值的索引 和 当前索引
                return [dic[target - nums[i]], i]
class Solution:
    def twoSum(self, nums, target):
        list1 = []
        lens = len(nums)
        for i in range(lens):
            if target-nums[i] not in list1:
                list1.append(nums[i])
            else:
                return [list1.index(target-nums[i]), i]

2.平方数之和

给定一个非负整数 c ,你要判断是否存在两个整数 ab,使得 a² + b² = c。

输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
思路一

​ 根据勾股定理 a 和 b都是要小于 < c******0.5(根号c),首先两个数必须要 属于 这个非负整数,可以用两个指针从0开始遍历 非负整数, 一个(0, c+1) 另一个(i, c+1)

ps 两个数可以重复 比如 12

class Solution1:  # 好的超时了,我们换一个 枯了....
    def judgeSquareSum(self, c):
        for i in range(0, int(c**0.5+1)):
            for j in range(i, int(c**0.5+1)):
                if i ** 2 + j ** 2 == c:
                    return True
思路二

​ 同理,a和b都小于根号c,首先遍历(0, int(c0.5+1)),再判断(c-i²)½ 的 数据类型 与 (c-i²)½ 是否相同

注意:这里不能直接根据数据类型是不是整形来判断,因为生成的result值是 float 整形也会以浮点型的方式表现出来 比如 result == 1 返回的是 1.0

class Solution1:
    def judgeSquareSum(self, c):
        for i in range(0, int(c**0.5)+1):
            result1 = (c-i*i)**0.5
            print(result1)  # 2.0
            if isinstance(result1, int) == True: 
                return True
            
result = Solution1()
print(result.judgeSquareSum(c=4))
class Solution1:
    def judgeSquareSum(self, c):
        for i in range(0, int(c**0.5)+1):
            result1 = (c-i*i)**0.5
            if int(result1) == (c-i*i)**0.5:  # if int((c-i*i)**0.5) == (c-i*i)**0.5:
                return True
        if int(result1) == (c-i*i)**0.5:  # if int((c-i*i)**0.5) == (c-i*i)**0.5:
            return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值