文章目录
一,最大间距
1,程序简介
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
示例 1:
- 输入: [3,6,9,1]
- 输出: 3
- 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
示例 2:
- 输入: [10]
- 输出: 0
- 解释: 数组元素个数小于 2,因此返回 0。
说明:
- 你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
- 请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 17 08:05:09 2022
Function: 最大间距
@author: 小梁aixj
"""
class Solution(object):
def maximumGap(self, nums):
if len(nums) < 2:
return 0
min_val, max_val = min(nums), max(nums)
if min_val == max_val:
return 0
n = len(nums) + 1
step = (max_val - min_val) // n
exist = [0 for _ in range(n + 1)]
max_num = [0 for _ in range(n + 1)]
min_num = [0 for _ in range(n + 1)]
for num in nums:
idx = self.findBucketIndex(num, min_val, max_val, n)
max_num[idx] = num if not exist[idx] else max(num, max_num[idx])
min_num[idx] = num if not exist[idx] else min(num, min_num[idx])
exist[idx] = 1
res = 0
pre = max_num[0]
for i in range(1, n + 1):
if exist[i]:
res = max(res, min_num[i] - pre)
pre = max_num[i]
return res
def findBucketIndex(self, num, min_val, max_val, n):
return int((num - min_val) * n / (max_val - min_val))
二,重复的DNA序列
1,程序简介
所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。
编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。
示例 1:
- 输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
- 输出:[“AAAAACCCCC”,“CCCCCAAAAA”]
示例 2:
- 输入:s = “AAAAAAAAAAAAA”
- 输出:[“AAAAAAAAAA”]
提示:
- 0 < = s . l e n g t h < = 1 0 5 0 <= s.length <= 10^5 0<=s.length<=105
- s[i] 为 ‘A’、‘C’、‘G’ 或 ‘T’
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 17 08:05:27 2022
Function: 重复的DNA序列
@author: 小梁aixj
"""
class Solution:
def findRepeatedDnaSequences(self, s: str) -> List[str]:
n = len(s)
res = []
dic = {}
for i in range(n - 9):
if s[i : i + 10] not in dic:
dic[s[i : i + 10]] = 1
else:
dic[s[i : i + 10]] += 1
if dic[s[i : i + 10]] == 2:
res.append(s[i : i + 10])
return res
三,二叉树的后序遍历
1,程序简介
给定一个二叉树,返回它的 后序 遍历。
示例:
-
输入: [1,null,2,3]
1
2
/
3 -
输出: [3,2,1]
进阶:
- 递归算法很简单,你可以通过迭代算法完成吗?
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 17 08:05:45 2022
Function: 二叉树的后序遍历
@author: 小梁aixj
"""
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def postorderTraversal(self, root: TreeNode):
if root is None:
return []
stack, output = [], []
stack.append(root)
while stack:
node = stack.pop()
output.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return output[::-1]