排名699 / 3981
5404.用栈操作构建数组
思路
思路就是暴力,从1到n判断是否在数组里,在的话就push,不在的话说明进去了又出来了,push,pop,一直到n等于数组的最后一个数为止
可惜这个题这么简单,加上罚时一次和我迟到五分钟,有20分钟了。。
class Solution(object):
def buildArray(self, target, n):
"""
:type target: List[int]
:type n: int
:rtype: List[str]
"""
length = len(target)
ans = []
for i in range(1,n+1):
if i in target:
ans.append("Push")
else:
ans+=["Push",'Pop']
if i == target[-1]:
break
return ans
5405.形成两个异或相等数组的三元组数目
思路
思路很简单:使用前缀和的想法。同时异或运算还具有结合律。
然后暴力即可。
class Solution(object):
def countTriplets(self, arr):
"""
:type arr: List[int]
:rtype: int
"""
n = len(arr)
if n==1:return 0
pre_sum = [0 for _ in range(n)]
for i in range(n):
if i==0:
pre_sum[i] = arr[i]
else:
pre_sum[i] = pre_sum[i-1]^arr[i]
ans = 0
for i in range(0,n-1):
for j in range(i+1,n):
for k in range(j,n):
pre_i_j = pre_sum[j-1]^pre_sum[i-1] if i!=0 else pre_sum[j-1]
pre_j_k = pre_sum[k]^pre_sum[j-1] if j!=k else arr[j]
if pre_i_j==pre_j_k:
ans+=1
return ans
5406.收集树上所有苹果的最少时间
思路
深度优先搜索,先别大致框架写出来,然后写递归退出条件,最后处理细节。
这里先处理一下保存每个节点的孩子节点。
然后判断当前节点:
1.如果是叶子节点,而且有苹果,返回2,代表到达父节点所需要的路径长度,否则返回0
2.如果不是叶子节点,则统计所有儿子到达自己所需要的路径长度,假如为0,则返回0(不需要走这条路),如果不为0或者当前节点有苹果,返回所有路径长度和+2。这里有一点特殊,就是如果是根节点,则不需要+2
代码如下,略丑。
class Solution(object):
def minTime(self, n, edges, hasApple):
"""
:type n: int
:type edges: List[List[int]]
:type hasApple: List[bool]
:rtype: int
"""
# init
nodes_to = [[] for _ in range(n)]
for froms,tos in edges:
nodes_to[froms].append(tos)
def dfs(i):
if not nodes_to[i]:
if hasApple[i]:
return 2
else:
return 0
t = 0
for node in nodes_to[i]:
num = dfs(node)
if num:
t = t+num
if (t!=0 or hasApple[i]==True) and i!=0:
t+=2
return t
return dfs(0)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。