0
点赞
收藏
分享

微信扫一扫

每日一练 — 2022.02.17

yeamy 2022-02-17 阅读 71

文章目录


一,最大间距

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]
举报

相关推荐

0 条评论