• leetcode刷题总结51-100


    51.52 N皇后问题

      描述:

        

       思路: 回溯

    53. 最大子序和

      描述:

        输入: [-2,1,-3,4,-1,2,1,-5,4],
        输出: 6

      思路: 动态规划。状态变量dp[i]表示当前第i个元素的最大子序和。dp[i]=max(dp[i-1],0)+num[i]

    54. 螺旋矩阵

      描述:

        输入:
          [
            [ 1, 2, 3 ],
            [ 4, 5, 6 ],
            [ 7, 8, 9 ]
          ]
        输出: [1,2,3,6,9,8,7,4,5]

      思路:按照读取的顺序依次遍历。(可以通过一种flag和递归。一趟递归为1-2-3-6-9-8-7-4)

    55. 跳跃游戏

      描述:

        输入: [2,3,1,1,4]
        输出: true1

      思路: 动态规划.状态变量dp[i]表示第i个台阶最少需要的次数。当在第一个台阶2的时候,决定了dp[1]=1,dp[2]=1,当到了第二个,dp[2]=min(dp[2]+dp[1]+1)

    56. 合并区间

      描述:

        输入: [[1,3],[2,6],[8,10],[15,18]]
        输出: [[1,6],[8,10],[15,18]]

      思路: 按照左边进行排序,然后开始遍历即可。采用一个指针记录当前最大的右边界,用于判断下一个左边界是否小于当前最大的有边界。

    57. 插入区间

      描述:

        输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
        输出: [[1,5],[6,9]]

      思路: 同56。

    58. 最后一个单词的长度

      描述:

        输入: "Hello World"
        输出: 5

      思路: 两个指针,一个指针从后往前,遇到第一个不为空的,为end,然后start从end开始往前,遇到一个的空停止。

    59. 螺旋矩阵

      描述:

        输入: 3
        输出:
          [
            [ 1, 2, 3 ],
            [ 8, 9, 4 ],
            [ 7, 6, 5 ]
          ]

      思路: 先生成一个n*n的空矩阵,按照思路生成填充即可。

    60. 第k个排列

      描述:

        输入: n = 3, k = 3
        输出: "213"

        解释:

          "123"
          "132"
            3. "213"
          "231"
          "312"
          "321"

      思路:回溯j+剪枝。比如第1个字符为”1“的时候,那么剩余2,3字符,排列为A2=2,3-2=1>0,那么就不可能出现在以1开始的字符串,开始2。。。。

    61. 旋转链表

      描述;

          输入: 1->2->3->4->5->NULL, k = 2
          输出: 4->5->1->2->3->NULL

      思路: 先遍历一遍,建立一个单项循环链表,然后头指针往后走k个,决定新的头指针和尾指针。。。。

    62. 不同路径

      描述:

        

       思路: 动态规划

    63.  不同路径 II

       描述: 有障碍物的62题

      思路:动态规划

    64. 最小路径和

      描述:有权重的62题

      思路:动态规划

    65. 有效数字

      描述:

          ”99e2.5 " => false
          "53.5e93" => true
          " --6 " => false
          "-+3" => false
          "95a54e53" => false

      思路: 3个变量,一个是e的falg,一个是符号的flag,一个是num的flag不断往后遍历设置值

    66. 加一

      描述:

        输入: [1,2,3]
        输出: [1,2,4]

      思路: 从后往前+1,进位初始0

    67. 二进制求和

      描述:

        输入: a = "11", b = "1"
        输出: "100"

      思路: 从后往前相加,进位初始0

    68. 文本对齐

      描述:

        输入:
          words = ["This", "is", "an", "example", "of", "text", "justification."]
          maxWidth = 16
        输出:
          [
             "This    is    an",
             "example  of text",
             "justification.  "
          ]

      思路:贪心,一行最大的单词个数

    69. x的平方根

      描述:

        输入: 8
        输出: 2
        说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去

      思路:二分

    70.爬楼梯

      动态规划。。

    71. 简化路径

      描述:

        输入:"/a/../../b/../c//.//"
        输出:"/c"

      思路: 从前往后遍历判断即可。

    72. 编辑距离

      动态规划

    73. 矩阵置0

      描述:

        输入:
          [
            [0,1,2,0],
            [3,4,5,2],
            [1,3,1,5]
          ]
        输出:
          [
            [0,0,0,0],
            [0,4,5,0],
            [0,3,1,0]
          ]

      思路:遍历图中,把需要改为0的地方修改成固定的我们设定的值,-1000000.然后第二遍遍历的时候直接把这个数改为0.

    74. 搜索二维矩阵

      描述:

        输入:
          matrix = [
          [1, 3, 5, 7],
          [10, 11, 16, 20],
          [23, 30, 34, 50]
          ]
          target = 3
        输出: true

      思路:从23开始判断,小于开始遍历此行,小于继续走上一行的第一个元素判断。(排场一行后,二分也可以)

    75. 颜色分类

      描述:

        输入: [2,0,2,1,1,0]
        输出: [0,0,1,1,2,2]

      思路: 一个current指针,一个p0指向第一个,p2指向最后一个,当nums[current]=0,则与p0交换;=2与p2交换,=1右移

        

        While curr <= p2 :

        若 nums[curr] = 0 :交换第 curr个 和 第p0个 元素,并将指针都向右移。

        若 nums[curr] = 2 :交换第 curr个和第 p2个元素,并将 p2指针左移 。

        若 nums[curr] = 1 :将指针curr右移。

    76. 最小覆盖子串

      描述:

        输入: S = "ADOBECODEBANC", T = "ABC"
        输出: "BANC"

       思路:滑动窗口

    77. 组合

      描述:

        输入: n = 4, k = 2
        输出:
        [
        [2,4],
        [3,4],
        [2,3],
        [1,2],
        [1,3],
        [1,4],
        ]

      思路:回溯

    78. 子集

      描述:

        输入: nums = [1,2,3]
        输出:
        [
        [3],
          [1],
          [2],
          [1,2,3],
          [1,3],
          [2,3],
          [1,2],
          []
        ]

      思路: 递归。从【】的子集是[],【1】是【】的子集中都添加1+【】

    79. 单词搜索

      描述:

        board =
        [
          ['A','B','C','E'],
          ['S','F','C','S'],
          ['A','D','E','E']
        ]

          给定 word = "ABCCED", 返回 true
          给定 word = "SEE", 返回 true
          给定 word = "ABCB", 返回 false

      思路:先找到第一个字符的位置,然后开始上下左右找第二三四。。。。注意边界,。

    80. 删除排序数组中的重复项 II

      描述:每个元素最多出现两次

        给定 nums = [0,0,1,1,1,1,2,3,3],

        函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。

      思路:两个指针和一个计数器即可。

    81. 搜索旋转排序数组

      描述:

        输入: nums = [2,5,6,0,0,1,2], target = 0
        输出: true

      思路:二分

    82. 删除排序链表中的重复元素 II

      描述:

        输入: 1->2->3->3->4->4->5
        输出: 1->2->5

      思路:第一个指针为第一个数字前的一个,第二个用于判断是否重复

    83.  删除排序链表中的重复元素

      描述:

        输入: 1->1->2
        输出: 1->2
      思路:雷同82

    84. 柱状图中最大的矩形

      描述:

        

       思路:单调栈

    85. 最大矩形

      描述:

        输入:
        [
        ["1","0","1","0","0"],
        ["1","0","1","1","1"],
        ["1","1","1","1","1"],
        ["1","0","0","1","0"]
        ]
        输出: 6

      思路:动态规划。dp[i][j][0]=dp[i-1][j][0]+1(nums[i][j]w==1)从当前节点能往左走多少个点。。。dp[i][j][1]不熬是往上

    86. 分隔链表

      描述:

        输入: head = 1->4->3->2->5->2, x = 3
        输出: 1->2->2->4->3->5

      思路:修改指针即可;或者分成两个链表(一个是小于3,一个大于,然后合并)

    87. 扰乱字符串

      描述:

        输入: s1 = "great", s2 = "rgeat"
        输出: true

      思路: 动态规划即可。dp[i]][j][len]表示s1从i开始和s2从j开始的长度为len是否可以变换。左子树和右子树交换相等还是左子树等于右子树

    88.  合并两个有序数组

      描述:

        输入:
        nums1 = [1,2,3,0,0,0], m = 3
        nums2 = [2,5,6], n = 3

        输出: [1,2,2,3,5,6]

      思路: 从后往前。

    89. 格雷编码

    90.  子集 II

      描述:

        输入: [1,2,2]
        输出:
          [
          [2],
          [1],
          [1,2,2],
          [2,2],
          1,2],
          []
          ]

      思路:回溯。

    91. 解码方法

      描述:

        输入: "12"
        输出: 2
        解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。  

      思路: 动态规划

    92. 反转链表 II

      描述:

        输入: 1->2->3->4->5->NULL, m = 2, n = 4
        输出: 1->4->3->2->5->NULL

      思路:指针走到m-1开始记录,将m~n采用插入的方式。

    93. 复原IP地址

      描述:

        输入: "25525511135"
        输出: ["255.255.11.135", "255.255.111.35"]

      思路: 回溯+剪枝

    94. 二叉树的中序遍历

      描述:

        

       思路:递归 左中右;栈

    95. 不同的二叉搜索树 II

      描述:

        

       思路:回溯

    96. 不同的二叉搜索树

      描述:

        

       思路:卡特兰数

    97. 交错字符串

      描述:

        输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
        输出: true

      思路:动态规划。dp[i][j]表示s1[i]与s2[j]能否构成s3的i+j

    98.  验证二叉搜索树

      描述:

        

      思路: 递归。

    99. 恢复二叉搜索树

      描述: 

        

       思路:先通过中序找到哪两个节点位置不对,交换即可。

    100. 相同的树

      描述:判断两个树是否一样。

      思路:递归 判断根节点

  • 相关阅读:
    ubuntu :安装skype聊天工具
    ubuntu :安装一个方便的终端工具,Guake Terminal
    ubuntu :安装好了搜狗输入法但是没法用
    Qt学习笔记(1) hello world
    Sublime + python2.7 + opencv (轻量级开发环境)
    Clion + opencv环境搭建(体验最好的C++ IDE)
    最快入门程序员
    isinstance,issubclass
    类的封装,property特性,类与对象的绑定方法和非绑定方法,
    类的继承,派生,组合,菱形继承问题,类的多态和多态性
  • 原文地址:https://www.cnblogs.com/dhName/p/13237542.html
Copyright © 2020-2023  润新知