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]
互相学习,互相指教。
本文介绍两种算法挑战:一是寻找数组中唯一出现一次的数字;二是进行二叉树的层次遍历。提供了Python实现代码,并讨论了算法的时间复杂度。
677

被折叠的 条评论
为什么被折叠?



