python 刷 leetcode 题目 (13)

136只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

代码如下:

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        mark = 0
        if len(nums) == 1:
            return(nums[0])
        else:
            for i in range(len(nums)-1):
                if nums[i] == nums[i+1] :
                    mark += 1
                else:
                    if mark == 0:
                        return nums[i]
                    else:
                        mark = 0
                if nums[-1] != nums[-2]:
                    return nums[-1]
                
       

102二叉树的层次遍历

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

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

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]

代码如下:44ms通过,采用队列的广度优先遍历

# 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):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if root is None:
            return []
        res = []
        queue = [root]
        while queue:
            nodes = []
            values = []
            for node in queue:
                if node.left:
                    nodes.append(node.left)
                if node.right:
                    nodes.append(node.right)
                values += [node.val]
            res += [values]
            queue = nodes
        return res
        
#### the second method 
        stack = [(root,0)]
        res = []
        while stack!=[]:
            node,level = stack.pop()
            if node:
                if len(res) < (level+1):
                    res.insert(0,[])
                res[-(level+1)].append(node.val)
                stack.append((node.right,level+1))
                stack.append((node.left,level+1))
        return res[::-1]    
            

互相学习,互相指教。


猜你喜欢

转载自blog.csdn.net/annilingmo/article/details/80593926