zoukankan      html  css  js  c++  java
  • 记第一次参加leecode竞赛

    虽然仅仅只是完成了第一小题,但是这毕竟是第一次嘛

    第二题是跟树有关的,没看明白,先留坑

    给出二叉搜索树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

    提醒一下,二叉搜索树满足下列约束条件:

    • 节点的左子树仅包含键小于节点键的节点。
    • 节点的右子树仅包含键大于节点键的节点。
    • 左右子树也必须是二叉搜索树。

    第三题是多边形里面画三角形然后三个顶点乘积求和求最小值的划分,这里思考尝试了,但是失败了。。。先把自己的贴上来

    class Solution:
        def minScoreTriangulation(self, A: List[int]) -> int:
            n=len(A)
            if(n==3):
                return A[0]*A[1]*A[2]
            else:
                for b in range(n-2):
                        sum=0
                        p=A[0]*A[b+1]*A[b+2]
                        sum+=p
                min=sum
                for a in range(n):
                    for b in range(n-2):
                        sum=0
                        p=A[a]*A[b+1]*A[b+2]
                        sum+=p
                    if(sum<min):
                        min=sum    
                return min

    这个错误的点就在于求乘积时,顶点没有改变,但是我暂时也不会改

    看一下别人的

    class Solution:
        def minScoreTriangulation(self, A: list[int]) -> int:
            n = len(A)
            dp = [[0 for j in range(n)] for i in range(n)]
            for step in range(2, n):
                for i in range(n):
                    j = (i + step) % n
                    dp[i][j] = None
                    for p in range(i + 1, i + step):
                        k = p % n
                        tmp = dp[i][k] + dp[k][j] + A[i] * A[j] * A[k]
                        if (dp[i][j] is None) or (tmp < dp[i][j]):
                            dp[i][j] = tmp
            ans = None
            for i in range(n):
                j = (i + n - 1) % n
                if (ans is None) or (dp[i][j] < ans):
                    ans = dp[i][j]
            return ans

    说实话,看不明白,留坑

    第四题是个搬石子的问题,暂时感觉也想不明白,留坑。

    在一个长度无限的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作端点石子。

    每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。

    值得注意的是,如果石子像 stones = [1,2,5] 这样,你将无法移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。

    当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。

    要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:answer = [minimum_moves, maximum_moves] 。

    输入:[7,4,9]
    输出:[1,2]
    解释:
    我们可以移动一次,4 -> 8,游戏结束。
    或者,我们可以移动两次 9 -> 5,4 -> 6,游戏结束。
  • 相关阅读:
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
    Unix
    Win7 扩容磁盘分区
    在Java中怎样高效的推断数组中是否包括某个元素
    2.JAVA编程思想——一切都是对象
    Cookie-Parser是怎样解析签名后的cookie的(同一时候对cookie和cookie-signature进行说明)
    hive 索引
    Javascript属性constructor/prototype的底层原理
    HTML5 的四个亮点
    零基础学python-1.5 第一个程序
  • 原文地址:https://www.cnblogs.com/dmndxld/p/10817071.html
Copyright © 2011-2022 走看看