"""
三个之和
给你一个包含n个整数和数组nums,
判断nums中是否存在三个元a,b,c使用a+b+c=0
请你找出所有的和为0且不重复的三元组
注意答案中不可以包含重复的三元组
示例1:
输入:nums=[-1,0,1,2,-1,-4]
注意不可以包含重复的三元组
示例2:
输入:nums=[]
示例3:
nums=[0]
输出:[]
"""
from typing import List
class Solution:
def threeSum(self,nums:List[int])->List[List[int]]:
# 异常判断,非空集合
if(len(nums)) == 0:
return []
result=[]
unique={}
inv = {}
left = None
right= None
nums.sort()
print(nums)
i = 0
"""
对数据进行了排序
去重,并以值进行了编号
"""
while i < len(nums):
if left == None and nums[i]>=0:
left = i
if right == None and nums[i] > 0:
right = i
inv[nums[i]]=i
i+=1
print(inv)
if left == 0:
right = len(nums)
if right is None:
return []
i = 0
while i <right:
j = i +1
while j < len(nums) and (-nums[i] >= nums[j]*2):
last = 0 - nums[i] -nums[j]
k = inv.get(last)
if k and k >j:
list = [nums[i],nums[j],last]
hash = f'{list[0]}_{list[1]}_{list[2]}'
if unique.get(hash) is None:
unique[hash] = True
result.append(list)
j=j+1
i+=1
return result
s = Solution()
print(s.threeSum([-1,2,0,1,-1,-4]))
"""
python 编码随机生成一个具有20个元素的元素的值在1-10之间的列表
随机生成一个具有20个元素值在1-10之间的列表
输出连续最长数的个数
"""
import random
list=[random.randint(1,10) for i in range(10)]
print(list)
l = r1 = 1
n = rn = list[0]
for v in list[1:]:
if v == n:
l +=1
if l > r1:
r1 = l
rn =v
else:
l = 1
n=v
print(f"连续最长的数是{rn} ,连续了{r1}次")
"""
格雷编码
格雷编码是一个二进制系统,在该系统中,两个连接续的数值仅有一位数的差异
给定一个代表编码一总位的非负整数n,打印其格雷编码序列。即使有使使有多个不同的答案
你只需需要返回其中一种,格雷编码必须以0开头
示例:
输入2
输出:【0,1,3,2】
解释:00 -001---111---310 -2
对于给定的n,其格雷编码序列并不唯一,例
"""
class Soultion( ):
def graycode(self,n):
res = [0]
for i in range(n):
for j in reversed(range(len(res))):
res.append(res[j]+(1<<i))
return res
s= Soultion()
print(s.graycode(2))