1.列表两个数和等于目标数就返回这两个数下标:
- 方法一:
```python
def twoSum(nums, target):
result = []
使用enumerate返回一个可迭代的列索引和值的对象(0, seq[0]), (1, seq[1])
for index, value in enumerate(nums):
return resultnext_index=index+1#判断目标数与value的差是否在目标列表nums,范围从index+1开始if target - value in nums[next_index:]:#符合条件就返回索引和下一个能组和成目标数的value的index#加上next_index,是因为target - value的索引是针对于新#列表nums[next_index:]中的位置,不是原列表nums位置,so#加上原来开始的位置next_indexresult.append([index, nums[next_index:].index(target - value) + next_index])
nums = [2, 11, 7, 15, 3, 6, 0, 9] target = 9 print(twoSum(nums, target))
运行结果[[0, 2], [4, 5], [6, 7]]
- 方法二:使用双层for循环 效率较低但是易于理解```pythonresult=[]for i in range(len(nums)):for j in range(i+1,len(nums)):if target==nums[i]+nums[j]:result.append(i)result.append(j)return result
2.垃圾回收机制:
- 引用计数
- 分代回收
- 标记清除
3.斐波那契数列:
- 方法一:递归方法
```python
def fib_recur(n):
if n<=1:
else:return n
return fib_recur(n-1)+fib_recur(n-2)
def ex(c): return int(c)
for i in range(1,10): print(fib_recur(i),end=’ ‘)
返回结果:1 1 2 3 5 8 13 21 34
- 方法二:**递推方法**```pythondef fib_loop(n):a,b=0,1for i in range(n+1):a,b=b,a+breturn afor i in range(20):print(fib_loop(i),end=' ')#输出结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
- 方法三:生成器
```python
def fib_loop_while(n):
a,b=0,1
for i in range(0,n):
a,b=b,a+byield a
for i in fib_loop_while(5): print(i,end=’ ‘)
输出结果:1 1 2 3 5
1、带有yield关键字的函数对象 他是返回一个列表list,list中的每个元素 都是 yield返回的每一个值 (每次执行yield输出值构成的列表)
2、带有yield的函数都被看成生成器,生成器是可迭代对象,且具备iter 和 next方法, 可以遍历获取元素
**4.字符串消消乐,相邻的两个字符串如果一致就消掉:**<br />例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。<br />之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。```pythonS = 'abbaca'st = []#对于字符串做遍历,如果st为空就把字符串遍历出的元素i加入#如果遍历出的元素=列表st的倒数第一个元素就移除列表中的一#个元素(默认最后一个)否则就将元素加入列表stfor i in S:if len(st) == 0:st.append(i)elif i == st[-1]:st.pop()else:st.append(i)print("".join(st))
5.找出一个字符串中子串,不含有重复字符的最长子串:
def lengthOfLongestSubstring( s):st = {}i, ans = 0, 0for j in range(len(s)):#当索引为j字符在st字典中时if s[j] in st:#i取(st[s[j]], i)中的最大值,其中st[s[j]]为该字符(也就是st中的key)在st中所对应的值i = max(st[s[j]], i)print(s[j],st[s[j]],i)#索引为j字符不在st中也就是不重复时,j-i+1(看作j+1-i)等价于其字符的位置减去st中在该字符出现重复时#在字符串上一次出现的位置(例第三次出现重复时,上一次也就是第二次出现的位置)ans = max(ans, j - i + 1)#字符串中索引为j字符在字符串中的位置st[s[j]] = j + 1return ansprint(lengthOfLongestSubstring('abcabcdbb'))#输出结果为:a 1 1b 2 2c 3 3b 5 5b 8 84
