排名699 / 3981

5404.用栈操作构建数组

image.png

思路

思路就是暴力,从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.形成两个异或相等数组的三元组数目

image.png

思路

思路很简单:使用前缀和的想法。同时异或运算还具有结合律。
然后暴力即可。

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.收集树上所有苹果的最少时间

image.png

思路

深度优先搜索,先别大致框架写出来,然后写递归退出条件,最后处理细节。

这里先处理一下保存每个节点的孩子节点。
然后判断当前节点:
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)

北语张益达
6 声望4 粉丝