zoukankan      html  css  js  c++  java
  • Leetcode刷题笔记(一)

    654. Maximum Binary Tree

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:

    1. The root is the maximum number in the array.
    2. The left subtree is the maximum tree constructed from left part subarray divided by the maximum number.
    3. The right subtree is the maximum tree constructed from right part subarray divided by the maximum number.

    Construct the maximum tree by the given array and output the root node of this tree.

    ------------------------------------------------------------------------------------------------------------------

    给定一个没有重复的整数数组。在此阵列上建立的最大树定义如下:

    1. 根是数组中的最大数目。
    2. 左边的子树是从左边的子数组中除以最大数目而得到的最大树。
    3. 右子树是从右部分子数组构造的最大树除以最大数目。

    通过给定的数组构造最大树并输出此树的根节点。

    ------------------------------------------------------------------------------------------------------------------

    Example 1:

    Input: [3,2,1,6,0,5]
    Output: return the tree root node representing the following tree:
    
          6
        /   
       3     5
            / 
         2  0   
           
            1
    

    Note:

    1. The size of the given array will be in the range [1,1000].

    题目不算难,可以很容易的想到解决思路:

    1. 创建一个根节点,其值为数组的最大值
    2. 创建根节点的左节点,左节点的值为数组左半部分的最大值
    3. 创建根节点的右节点,右节点的值为数组右半部分的最大值
    4. 递归以上操作
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
            if nums ==[]:
                return None
            index = nums.index(max(nums))
            root = TreeNode(max(nums))
            root.left = self.constructMaximumBinaryTree(nums[:index])
            root.right = self.constructMaximumBinaryTree(nums[index+1:])
            return root
    

      

    1305. All Elements in Two Binary Search Trees
     

    Given two binary search trees root1 and root2.

    Return a list containing all the integers from both trees sorted in ascending order.

    Example 1:

    Input: root1 = [2,1,4], root2 = [1,0,3]
    Output: [0,1,1,2,3,4]
    

    Example 2:

    Input: root1 = [0,-10,10], root2 = [5,1,7,0,2]
    Output: [-10,0,0,1,2,5,7,10]
    

    Example 3:

    Input: root1 = [], root2 = [5,1,7,0,2]
    Output: [0,1,2,5,7]
    

    Example 4:

    Input: root1 = [0,-10,10], root2 = []
    Output: [-10,0,10]
    

    Example 5:

    Input: root1 = [1,null,8], root2 = [8,1]
    Output: [1,1,8,8]
    

    Constraints:

    • Each tree has at most 5000 nodes.
    • Each node's value is between [-10^5, 10^5].

    516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the maximum length of s is 1000.

    Example 1:
    Input:

    "bbbab"
    

    Output:

    4
    

    One possible longest palindromic subsequence is "bbbb".

    Example 2:
    Input:

    "cbbd"
    

    Output:

    2
    

    One possible longest palindromic subsequence is "bb".

    DP解决

     python
    from functools import lru_cache #不加这个可能会超时
    class Solution:
        def longestPalindromeSubseq(self, s: str) -> int:
            @lru_cache(None)
            def dp(i, j):
                if i == j:
                    return 1
                elif i > j:
                    return 0
                if s[i] == s[j]:
                    return 2 + dp(i + 1, j - 1)
                else:
                    return max(dp(i + 1, j), dp(i, j - 1))
                
            s = list(s)
            return dp(0, len(s) - 1)

    1790. Rotate String II

     (LintCode)

    Description

    Given a string(Given in the way of char array), a right offset and a left offset, rotate the string by offset in place.(left offest represents the offset of a string to the left,right offest represents the offset of a string to the right,the total offset is calculated from the left offset and the right offset,split two strings at the total offset and swap positions)。

    Example

    Example 1:

    Input:str ="abcdefg", left = 3, right = 1
    Output:"cdefgab"
    Explanation:The left offset is 3, the right offset is 1, and the total offset is left 2. Therefore, the original string moves to the left and becomes "cdefg"+ "ab".
    

    Example 2:

    Input:str="abcdefg", left = 0, right = 0
    Output:"abcdefg"
    Explanation:The left offset is 0, the right offset is 0, and the total offset is 0. So the string remains unchanged.
    

    Example 3:

    Input:str = "abcdefg",left = 1, right = 2
    Output:"gabcdef"
    Explanation:The left offset is 1, the right offset is 2, and the total offset is right 1. Therefore, the original string moves to the left and becomes "g" + "abcdef".
    
  • 相关阅读:
    微信小程序 --- 无法跳转到tab页面问题
    CSS实现单行、多行文本溢出显示省略号(…)
    Animate.css的使用
    Java基础知识学习
    npm 安装包失败 --- 清除npm缓存
    git 学习(4) ----- git rebase
    数组中的reduce 函数理解
    webpack4 学习 --- 使用loader处理静态资源
    IE 11 flex布局兼容性问题 ---- 不支持min-height 和flex:1
    java 中的内置数据类型
  • 原文地址:https://www.cnblogs.com/baiyunwanglai/p/12153983.html
Copyright © 2011-2022 走看看