数据结构与算法:第一周作业一:加法

题目概述

在这里插入图片描述
题目链接:https://leetcode-cn.com/problems/two-sum/

解法一:遍历法

思路

遍历数组中的元素nums[i],看target -nums[i]是否也在数组中。

代码

class Solution:    
	def twoSum(self, nums: List[int], target: int) -> List[int]:
		for i in range(len(nums)):
			if target-nums[i] in nums:
				if target-nums[i]==nums[i] and nums.count(nums[i])==1 #如果差与被减数相等且数组中只有一个这个数时,不满足条件(因为重复利用)
					continue
				else:
					j=nums.index(target-nums[i],i+1) #找到的数一定在nums[i]后面
					return [i,j]
					break
				

因为全部遍历,所以耗时较长。

解法二:部分遍历

思路:根据差与减数的位置,可以从减数的左和右进行履历。

# 一二行参照解法一,一模一样,后面不再叙述。
for i in range(len(nums)):
	if target-nums[i] in nums[:i]:#切片法取左不取右,所以不用考虑相等的情况
		j=nums.index(target-nums[i])
		return [j,i]

比较于方法一有较大改进。

解法二:结合字典.

思路:可以边遍历的时候把数组中的值和索引放到字典里,通过字典的get()来找索引。

代码:

for i,num in enumerate(nums):   	
	HashMap[num]=i
for i in range(len(nums)):  
   	j=HashMap.get(target-nums[i])   #把在字典里的值(原来的索引)给j
    	if j is not None and j!=i:   
        	return([i,j])
        	break

优点:速度更快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值