毕设答辩顺利通过啦~
争取每日两道Easy题,快来一起学习吧~
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
1.1 暴力解法
用两层循环,遍历整个数组:
空间复杂度:O(1),时间复杂度:O(n^2).
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if(target==(nums[i]+nums[j])):
return [i,j]
return none
1.2 字典容器法
遍历数组元素,并将 target-nums[i] 及 下标i 存入字典,若 nums[j] 存在于字典中,则返回下标 j 和 其所对应的值。
空间复杂度:O(n) 时间复杂度:O(n)
Key | Value |
---|---|
targt-nums[i] | index |
def twoSum(self, nums: List[int], target: int) -> List[int]:
store={}
for i in range(len(nums)):
another=target-nums[i]
if nums[i] in store:
return [i,store[nums[i]]]
else:
store[another]=i
return none
2. 整数翻转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
e.g. 123→321 -123→-321 120→21
假设环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
2.1 数学求余解法
思路见代码:采用循环结构取出个位数,每循环一次,sum=sum*10+res
空间复杂度:O(1) 时间复杂度:O(logn)
def reverse(self, x: int) -> int:
sum=0
newx=abs(x)
while newx!=0:
res=newx%10
sum=sum*10+res
newx=newx//10
if x>=0:
if sum <= 2**31-1:
return sum
else:
return 0
else:
if -sum >= -2**31:
return -sum
else:
return 0
2.2 Python切片法
将整数转为字符串,进行step为-1的切片,再转为int类型的整数
空间复杂度:O(1) 时间复杂度:O(n)
def reverse(self, x: int) -> int:
if x>=0:
newx=int(str(x)[::-1])
if newx<=2**31-1:
return newx
else:
return 0
if x<0:
newx=-int(str(x)[1:][::-1])
if newx >= -2**31:
return newx
else:
return 0
3. 收获
3.1 Python字典的基本操作
3.2 Python运算符
Python 运算符
需要注意部分运算符与C语言的区别,如幂、除、整除、逻辑运算符:and or not.
3.3 Python切片
Python 切片
Python中符合切片并且常用的有:列表,字符串,元组。
以列表为例:
格式:[开始:结束:步长]
开始:当步长>0时,不写默认0。当步长<0时,不写默认-1
结束:当步长>0时,不写默认列表长度加一。当步长<0时,不写默认负的列表长度减一
步长:默认1,>0 是从左往右走,<0是从右往左走。
即包含开始,不包含结束。