leetcode题目
1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
nums = [2,7,11,15]
target = 9
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i] + nums[j] == target:
print([i,j])
2.三数之和(超时了311/313)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。nums = [-1, 0, 1, 2, -1, -4]
target = 0
lis1=[]
lis2=[]
for i in range(len(nums)):
for j in range(i+1,len(nums)-2):
for k in range(j + 1, len(nums)-1):
if nums[i] + nums[j] + nums[k] == target:
lis = [nums[i],nums[j],nums[k]]
lis1.append(lis)
break
for l in range(len(lis1)):
lis1[l].sort()
for m in lis1:
if m not in lis2:
lis2.append(m)
print(lis2)
3.无重复字符的最长子串(复制的)
给定一个字符串,请你找出其中不含有重复字符的 最长子串的长度。
maxm = 0
for i in range(len(s)):
if s[i] in l:
p = l.index(s[i])
l = l[p+1:]
l.append(s[i])
maxm = max(len(l),maxm)
return maxm
4.寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1
和 nums2
。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1
和 nums2
不会同时为空
nums1 = [1, 3]
nums2 = [2]
nums1.extend(nums2)
nums1.sort()
n = len(nums1)
if n%2 == 0:
x = (nums1[int(n/2-1)]+nums1[int(n/2)])/2
print(float(x))
else:
y = nums1[int((n-1)/2)]
print(float(y))
5.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。(假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0)
x = -12345
int_a = abs(x)
str_b = str(int_a)[::-1]
int_c = int(str_b)
if x > 0 and int_c < 2 ** 31 - 1:
print(int_c)
elif -int_c > -2 ** 31 and x <= 0:
print(-int_c)
else:
print(0)
6.回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
x = -121
y = int(str(abs(x))[::-1])
print(y==x)
7.有效括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
s = '()'
while '()' in s or '[]' in s or '{}' in s:
s = s.replace('()','')
s = s.replace('[]', '')
s = s.replace('{}', '')
print( not s)
8.两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
nums1 = [1,2,2,1]
nums2 = [2,2]
lis = []
for i in nums1:
for j in nums2:
if i == j:
lis.append(i)
new_lis = []
for i in lis:
if i not in new_lis:
new_lis.append(i)
return (new_lis)
9.实现strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
haystack = "hello"
needle = "ll"
print(haystack.find(needle))
10.收索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。
nums = [1,3,4,6]
target =5
if target in nums:
print(nums.index(target))
else:
nums.append(target)
nums.sort()
print(nums.index(target))
11.只出现一次数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
nums=[2,2,1]
if len(nums) == 1:
return (nums[0])
else:
nums.sort()
if nums[0] != nums[1]:
return (nums[0])
elif nums[-1] != nums[-2]:
return (nums[-1])
else:
for i in range(1, len(nums) - 1):
if nums[i] != nums[i - 1] and nums[i] != nums[i + 1]:
return (nums[i])
12.存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
nums = [1,2,3,1]
return (len(set(nums)) != len(nums))
