2022跟着leedcode学数据结构--第36天

148 阅读1分钟

「这是我参与2022首次更文挑战的第36天,活动详情查看:2022首次更文挑战

image.png

[剑指 Offer 50. 第一个只出现一次的字符]

难度简单

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例 1:

输入:s = "abaccdeff" 输出:'b' 示例 2:

输入:s = "" 输出:' '  

限制:

0 <= s 的长度 <= 50000

考察点:

  • 哈希表:
    • Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组、链表、树等数据结构不同,在这些数据结构中查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间级。

解题思路:

  • 这里用到了字典
  • 首先初始化字典,依次将s中字符写入字典
  • 遍历字典,判断第一个==1 的就是出现次数为1的值。
class Solution:
    def firstUniqChar(self, s: str) -> str:
        doc = {}
        for row in s:
            doc.setdefault(row,0)
            doc[row]+=1
        for arr,index in doc.items():
            if index==1:
                return arr
        return " "            

执行结果:

image.png

[面试题32 - I. 从上到下打印二叉树]

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

 

例如: 给定二叉树: [3,9,20,null,null,15,7],

3

/
9 20 /
15 7 返回:

[3,9,20,15,7]  

提示:

节点总数 <= 1000

解题思路:

  • 先判断特殊情况 root是否为空
  • 根据题意,自然而然想到了广度优先搜索(BFS)
  • BFS 通常借助 队列 的先入先出特性来实现
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        if root == None:
            return []
        res = []
        def bfs(root,res):
            tmp = [root]
            while len(tmp) > 0:
                ans = tmp.pop(0)
                res.append(ans.val)
                if ans.left != None:
                    tmp.append(ans.left)
                if ans.right != None:
                    tmp.append(ans.right)
        bfs(root,res)
        return res

执行结果:

image.png