子序列 子数组问题 Leetcode

2023-05-16

子序列 子数组问题

53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

解法1: 贪心法

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        max_sum = nums[0]
        cur_sum = 0
        for i in range(0, len(nums)):
            cur_sum += nums[i]
            max_sum = max(max_sum, cur_sum)
            if cur_sum < 0:  # 小于0 再加也会减少
                cur_sum = 0

        return max_sum

解法2: 动态规划

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # 动态规划,
        for i in range(1, len(nums)):
            if nums[i-1] > 0: # 大于0 加
                nums[i] = nums[i] + nums[i-1]

        return max(nums)

674. 最长连续递增序列

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 lrl < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。 

解法1:

class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        # 最长 且 连续递增 子序列
        if not nums:
            return 0
        max_length = 1
        temp = 1 # 计算连续递增子序列个数
        for i in range(1, len(nums)):
            if nums[i] > nums[i-1]:
                temp += 1
                max_length = max(max_length, temp)
            else:
                temp = 1
        return max_length

300. 最长递增子序列 ** 重点复习

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

解法1: 动态规划 O ( n 2 ) O(n^2) O(n2)

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        # 最长严格递增子序列的长度
        # 子序列 和 子数组是不同的;
        #  动态规划
        nums_len = len(nums)
        dp = [] # dp[i]: 表示 到i时 最长严格递增子序列的长度
        for i in range(nums_len):
            dp.append(1) # 从1开始
            # i 和之前的 每个j 比较,若严格递增,则dp[j]+1 比较 
            for j in range(len(dp)):
                if nums[j] < nums[i]:
                    dp[i] = max(dp[i], dp[j]+1)

        return max(dp)

解法2: O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))

673. 最长递增子序列的个数 ** 重点复习

给定一个未排序的整数数组,找到最长递增子序列的个数。

示例 1:

输入: [1,3,5,4,7]
输出: 2
解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。

解法1: 动态规划 O ( n 2 ) O(n^2) O(n2)

class Solution:
    def findNumberOfLIS(self, nums: List[int]) -> int:
        # 个数
        nums_len = len(nums)
        length = []
        counts = [] # 第i结尾时,最长递增序列的个数
        for i in range(nums_len):
            length.append(1)
            counts.append(1)
            for j in range(i):
                if nums[j] < nums[i]: # i 可以放到j后 构成递增序列
                    if length[i] <= length[j]:  # 或者 length[i] < length[j] + 1:
                        length[i] = length[j]+1
                        counts[i] = counts[j] # 长度个数更新
                    elif length[i] == length[j]+1:
                        # 相等
                        counts[i] += counts[j] # 相加
                    
        max_length = max(length)
        max_count = 0
        for i in range(len(length)):  # 长度最长的 对应count数目之和
            if length[i] == max_length:
                max_count += counts[i]

        return max_count

1143. 最长公共子序列 ** 动态规划典型题目

给定两个字符串 text1text2,返回这两个字符串的最长公共子序列的长度。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
例如,"ace" 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。

若这两个字符串没有公共子序列,则返回 0。

示例 1:

输入:text1 = "abcde", text2 = "ace" 
输出:3  
解释:最长公共子序列是 "ace",它的长度为 3。

解法1: 动态规划重点题

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        # 两个字符串的 最长公共子序列
        # 典型动态规划题目, 面试常考题 重点复习记忆, 和 不同路径题目 很相似,都是 典型动态规划题目
        text1_len = len(text1)
        text2_len = len(text2)
        dp = [[0] * (text2_len+1) for _ in range(text1_len+1)]  
        # dp[i][j]: 表示text1[0...i-1]和text2[0...j-1]的最长公共子序列的长度
        # dp[0][0]: 表示 text1和text2为null时 最长公共子序列 为0;
        # dp[1][1]: 表示text1[0]和text2[0]的 最长公共子序列长度; 
        for i in range(1, text1_len+1): # 注意边界条件
            for j in range(1, text2_len+1):
                if text1[i-1] == text2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:  # 递归公式
                    dp[i][j] = max(dp[i][j-1], dp[i-1][j])
       
        return dp[text1_len][text2_len]

718. 最长重复子数组 ** 动态规划

给两个整数数组 AB ,返回两个数组中公共的、长度最长的子数组的长度。
示例:

输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出:3
解释:
长度最长的公共子数组是 [3, 2, 1] 。

解法1: 动态规划

class Solution:
    def findLength(self, A: List[int], B: List[int]) -> int:
        #  动态规划
        # 子数组 是 连续的!切记! 子序列不是连续的! 连续子序列是连续的!
        A_len = len(A)
        B_len = len(B)
        dp = [[0]*(B_len+1) for _ in range(A_len+1)]
        max_res = 0
        for i in range(1, A_len+1):
            for j in range(1, B_len+1):
                if A[i-1] == B[j-1]:  # 连续条件的判断呢? 
                    dp[i][j] = dp[i-1][j-1] + 1
                else:  # 注意递推条件的改变;
                    dp[i][j] = 0  # 不相等就是 0,【保证连续】
                    # dp[i][j] = max(dp[i][j-1], dp[i-1][j])
                max_res = max(max_res, dp[i][j])
        # print(dp)
        return max_res

724. 寻找数组的中心索引

给你一个整数数组 nums,请编写一个能够返回数组 “中心索引” 的方法。

数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。

注意: 中心索引可能出现在数组的两端。

解法1: 前缀和

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        total = sum(nums)
        acc_sum = 0
        for i in range(len(nums)):
            if acc_sum == total - acc_sum - nums[i]:
                return i
            acc_sum += nums[i]
        return -1

560. 和为K的子数组 *

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例 1:

输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

说明 :

  • 数组的长度为 [1, 20,000]。
  • 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。
class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        # python 枚举超时
        # 前缀和 + 哈希表 优化
        count = 0
        hashtable = {0:1} # 前缀和作为key,出现次数为value, 存储前缀和;
        preSum = 0 # 前缀和
        for item in nums:
            preSum += item
            if hashtable.get(preSum-k): # 脑子疼..........
                count += hashtable.get(preSum-k)
            if preSum not in hashtable:
                hashtable[preSum] = 1  # 
            else:
                hashtable[preSum] = hashtable[preSum] + 1
        # print(hashtable)
        return count

523. 连续的子数组和 * 重点复习

给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数

示例 1:

输入:[23,2,4,6,7], k = 6
输出:True
解释:[2,4] 是一个大小为 2 的子数组,并且和为 6。

示例 2:

输入:[23,2,6,4,7], k = 6
输出:True
解释:[23,2,6,4,7]是大小为 5 的子数组,并且和为 42。

说明:

  • 数组的长度不会超过 10,000 。
  • 你可以认为所有数字总和在 32 位有符号整数范围内。

解法1: 前缀和的 思想
详解

class Solution:
    def checkSubarraySum(self, nums: List[int], k: int) -> bool:
        # 连续子数组 其大小 >= 2;
        # n 是一个整数,有可能是负数(k<0)
        hashtable = {0:-1} # key: 前缀和%k, value: 索引
        preSum = 0
        for index, item in enumerate(nums):
            preSum += item
            if k != 0:
                preSum = preSum % k  # 重点
            if hashtable.get(preSum) != None: # python 为0 也算 (索引有可能为0)
                if index - hashtable.get(preSum)> 1:
                    return True
            else:
                hashtable[preSum] = index

        return False

974. 和可被 K 整除的子数组

给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。

示例:

输入:A = [4,5,0,-2,-3,1], K = 5
输出:7
解释:
有 7 个子数组满足其元素之和可被 K = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

提示:

  • 1 <= A.length <= 30000
  • -10000 <= A[i] <= 10000
  • 2 <= K <= 10000

解法1: 前缀和
思路:
那么每个连续子数组的和 s u m ( i , j ) sum(i,j) sum(i,j)就可以写成$ P[j] - P[i-1]$, 此时,判断子数组的和能否被 K K K 整除就等价于判断 ( P [ j ] − P [ i − 1 ] )   m o d   K = = 0 (P[j] - P[i-1]) \bmod K == 0 (P[j]P[i1])modK==0,根据 同余定理,只要 P [ j ]   m o d   K = = P [ i − 1 ]   m o d   K P[j] \bmod K == P[i-1] \bmod K P[j]modK==P[i1]modK,就可以保证上面的等式成立。

class Solution:
    def subarraysDivByK(self, A: List[int], K: int) -> int:
        dicts = {0:1}
        preSum = 0
        count = 0
        for item in A:
            preSum += item
            if K != 0:
                preSum = preSum % K  ## 取模
            if dicts.get(preSum) != None:
                count += dicts[preSum]   ## 统计已有的, 已有的每个和 当前这个 都可以组成满足条件的 子数组;
                dicts[preSum] += 1
            else:
                dicts[preSum] = 1

        return count

1248. 统计「优美子数组」

给你一个整数数组 nums 和一个整数 k

如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。

请返回这个数组中「优美子数组」的数目。

示例 1:

输入:nums = [1,1,2,1,1], k = 3
输出:2
解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。

方法1:

class Solution:
    def numberOfSubarrays(self, nums: List[int], k: int) -> int:
        # 如何统计k个 奇数数字 
        odd_list = {0:1}
        odd_s = 0 # 类似前缀和 (奇数出现之和)
        count = 0  
        for item in nums:
            if item % 2 != 0: # 奇数
                odd_s += 1
            if odd_list.get(odd_s - k):
                count += odd_list.get(odd_s - k)
            # count += odd_list.get(odd_s - k, 0)
            if odd_s not in odd_list:
                odd_list[odd_s] = 1
            else:
                odd_list[odd_s] += 1
        
        return count

713. 乘积小于K的子数组 ** 多复习

给定一个正整数数组 nums

找出该数组内乘积小于 k 的连续的子数组的个数。

示例 1:

输入: nums = [10,5,2,6], k = 100
输出: 8
解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。
需要注意的是 [10,5,2] 并不是乘积小于100的子数组。

解法1: 双指针

class Solution:
    def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:
        # 数组内都是正整数
        if k <= 1:
            return 0
        acc = 1
        left = 0
        count = 0
        for right, value in enumerate(nums):
            acc *= value
            while acc >= k:  # 组内都是正整数才满足
                acc /= nums[left]
                left += 1
            count += right - left + 1  # 很巧妙
        return count

325. 和等于 k 的最长子数组长度

给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。

注意:
nums 数组的总和是一定在 32 位有符号整数范围之内的。

示例 1:

输入: nums = [1, -1, 5, -2, 3], k = 3
输出: 4 
解释: 子数组 [1, -1, 5, -2] 和等于 3,且长度最长。

解法1: 前缀和

class Solution:
    def maxSubArrayLen(self, nums: List[int], k: int) -> int:
        # 记下索引位置吗
        prelist = {0:-1}
        presum = 0
        max_len = 0
        for index, item in enumerate(nums):
            presum += item
            if prelist.get(presum-k) != None: # 切记必须使用None
                max_len = max(max_len, index-prelist.get(presum-k))
            if presum not in prelist:
                prelist[presum] = index

        return max_len

152. 乘积最大子数组 *

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

解法1: 动态规划

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        # 求乘积和求和是 有些不同
        # 动态规划
        if len(nums) <= 0:
            return 0
        # 两个数组 
        minValue = nums[0] # 有最大值 最小值 
        maxValue = nums[0]
        ans = nums[0]
        for i in range(1, len(nums)):
            temp = minValue # 切记 ; 
            minValue = min(minValue*nums[i], nums[i], maxValue*nums[i])
            maxValue = max(temp*nums[i], nums[i], maxValue*nums[i])
            ans = max(ans, maxValue)
        return ans

238. 除自身以外数组的乘积 *

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例:

输入: [1,2,3,4]
输出: [24,12,8,6]

提示: 题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。

说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

解法1: 左部分*右部分, 注意边界条件

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        # 两次遍历, 左部分乘积, 右部分乘积;结果:左部分乘积*右部分乘积;
        # 左右两端,都为1
        left = 1
        nums_len = len(nums)
        res = [0]*nums_len
        for i in range(nums_len):
            if i > 0:  # 注意边界条件
                left = left*nums[i-1]
            res[i] = left
        # 右部分
        right = 1
        for i in range(nums_len-1, -1, -1):
            if i < nums_len-1:
                right = right*nums[i+1]
            res[i] = res[i]*right  # 注意边界条件
        return res
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子序列 子数组问题 Leetcode 的相关文章

  • 感受野的计算方法

    卷积神经网络基础题 如何计算多层卷积 池化网络每一层的感受野 Receptive Field
  • day2:215. 数组中的第K个最大元素 快速排序 python代码

    34 34 34 快速排序 思想 xff1a 基本思想是 xff1a 通过一趟排序将要排序的数据分割成独立的两部分 xff0c 其中一部分的所有数据都比另外一部分的所有数据都要小 xff0c 然后再按此方法对这两部分数据分别进行快速排序 x
  • 梯度消失和梯度爆炸原因及其解决方案

    梯度消失和梯度爆炸原因及其解决方案
  • day3: 剑指 Offer 48. 最长不含重复字符的子字符串

    剑指 Offer 48 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串 xff0c 计算该最长子字符串的长度 示例 1 输入 34 abcabcbb 34 输出 3 解释 因为无重复字符的最长子串是 34 a
  • idea中java版本设置

    1 打开file gt Project structure gt project Settings gt Project gt Project SDK中设置 2 设置IDEA本身的jdk版本 打开file gt settings gt ja
  • 剑指 Offer 59 - II. 队列的最大值

    剑指 Offer 59 II 队列的最大值 请定义一个队列并实现函数 max value 得到队列里的最大值 xff0c 要求函数max value push back 和 pop front 的均摊时间复杂度都是O 1 若队列为空 xff
  • 剑指 Offer 46. 把数字翻译成字符串

    剑指 Offer 46 把数字翻译成字符串 给定一个数字 xff0c 我们按照如下规则把它翻译为字符串 xff1a 0 翻译成 a xff0c 1 翻译成 b xff0c xff0c 11 翻译成 l xff0c xff0c 25 翻译成
  • python 异或的应用

    符号 描述 运算规则 amp 与 两个位都为1时 xff0c 结果才为1 xff08 统计奇数 xff09 全1为1 或 两个位都为0时 xff0c 结果才为0 xff08 统计偶数 xff09 全0为0 异或 两个位相同为0 xff0c
  • day4: 剑指 Offer 64. 求1+2+…+n

    剑指 Offer 64 求1 43 2 43 43 n 求 1 43 2 43 43 n xff0c 要求不能使用乘除法 for while if else switch case等关键字及条件判断语句 xff08 A B C xff09
  • day5: 链表

    1 剑指 Offer 22 链表中倒数第k个节点 输入一个链表 xff0c 输出该链表中倒数第k个节点 为了符合大多数人的习惯 xff0c 本题从1开始计数 xff0c 即链表的尾节点是倒数第1个节点 例如 xff0c 一个链表有6个节点
  • LCP 18. 早餐组合

    小扣在秋日市集选择了一家早餐摊位 xff0c 一维整型数组 staple 中记录了每种主食的价格 xff0c 一维整型数组 drinks 中记录了每种饮料的价格 小扣的计划选择一份主食和一款饮料 xff0c 且花费不超过 x 元 请返回小扣
  • 第 208 场周赛

    1 5523 文件夹操作日志搜集器 class Solution def minOperations self logs List str gt int 栈 xff0c 先进 后出 zhan 61 39 main 39 for log in
  • day 5: 字符串

    1 剑指 Offer 38 字符串的排列 输入一个字符串 xff0c 打印出该字符串中字符的所有排列 你可以以任意顺序返回这个字符串数组 xff0c 但里面不能有重复元素 示例 xff1a 输入 xff1a s 61 34 abc 34 输
  • day6: 数组

    1 18 四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target xff0c 判断 nums 中是否存在四个元素 a xff0c b xff0c c 和 d xff0c 使得 a 43 b 43 c 43 d 的值与
  • day7: 剑指 Offer 44. 数字序列中某一位的数字

    1 剑指 Offer 44 数字序列中某一位的数字 数字以0123456789101112131415 的格式序列化到一个字符序列中 在这个序列中 xff0c 第5位 xff08 从下标0开始计数 xff09 是5 xff0c 第13位是1
  • casbin 使用说明记录

    本文简单记录casbin 安装步骤 使用 Casbin 作为 ThinkPHP 的权限控制中间件 PHP Casbin 是一个强大的 高效的开源访问控制框架 xff0c 它支持基于各种访问控制模型的权限管理 Think Casbin 是一个
  • 844. 比较含退格的字符串

    给定 S 和 T 两个字符串 xff0c 当它们分别被输入到空白的文本编辑器后 xff0c 判断二者是否相等 xff0c 并返回结果 代表退格字符 注意 xff1a 如果对空文本输入退格字符 xff0c 文本继续为空 示例 1 xff1a
  • 笔试题记录

    1 逆波兰表达式 是称为 后缀表达式 xff0c 把运算量写在前面 xff0c 把算符写在后面 写出a b c d 43 e f g h 43 i j k 的逆波兰表达式 拆开写各个部分的 xff1a 按优先级 xff08 1 xff09
  • 牛客网 赛码在线编程中数据读取问题

    一 数据读取的方式 xff08 python3 xff09 1 input 读取输入数据 while True try inputs 61 input except break 2 网站的数据输入是是一个含有多行数据的input文件 in文
  • 贪心算法 leetcode编程题

    1 452 用最少数量的箭引爆气球 在二维空间中有许多球形的气球 对于每个气球 xff0c 提供的输入是水平方向上 xff0c 气球直径的开始和结束坐标 由于它是水平的 xff0c 所以纵坐标并不重要 xff0c 因此只要知道开始和结束的横

随机推荐

  • 排序题 LeetCode题

    1 1370 上升下降字符串 给你一个字符串 s xff0c 请你根据下面的算法重新构造字符串 xff1a 从 s 中选出 最小 的字符 xff0c 将它 接在 结果字符串的后面 从 s 剩余字符中选出 最小 的字符 xff0c 且该字符比
  • BP算法公式推导

    令表示第层的第个神经元到第层的第个神经元的连接权值 xff0c 表示第层第个神经元的输入 xff0c 表示第层第个神经元的输出 xff0c 表示层第个神经元的偏置 xff0c C表示代价函数 则有 xff1a 其中 表示激活函数 训练多层网
  • 卷积神经网络中的Separable Convolution_转载

    卷积神经网络在图像处理中的地位已然毋庸置疑 卷积运算具备强大的特征提取能力 相比全连接又消耗更少的参数 xff0c 应用在图像这样的二维结构数据中有着先天优势 然而受限于目前移动端设备硬件条件 xff0c 显著降低神经网络的运算量依旧是网络
  • 二分查找方法 leetcode题

    这里用来 记录 使用二分查找方法 的题目 1 704 二分查找 给定一个 n 个元素有序的 xff08 升序 xff09 整型数组 nums 和一个目标值 target xff0c 写一个函数搜索 nums 中的 target xff0c
  • 动态规划题 leetcode

    1 62 不同路径 一个机器人位于一个 m x n 网格的左上角 xff08 起始点在下图中标记为 Start xff09 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 xff08 在下图中标记为 Finish xff09
  • 字典序 Leetcode题目

    1 440 字典序的第K小数字 给定整数 n 和 k xff0c 找到 1 到 n 中字典序第 k 小的数字 注意 xff1a 1 k n 109 示例 xff1a 输入 n 13 k 2 输出 10 解释 字典序的排列是 1 10 11
  • Git:从Git下载项目到本地及项目重建

    从Git上下载项目 重建项目
  • 子序列题目 Leetcode题目

    1 53 最大子序和 面试题 16 17 连续数列 给定一个整数数组 nums xff0c 找到一个具有最大和的连续子数组 xff08 子数组最少包含一个元素 xff09 xff0c 返回其最大和 示例 xff1a 输入 2 1 3 4 1
  • 整数问题(求和 拆分 替换等) leetcode问题

    1 829 连续整数求和 给定一个正整数 N xff0c 试求有多少组连续正整数满足所有数字之和为 N 示例 1 输入 5 输出 2 解释 5 61 5 61 2 43 3 xff0c 共有两组连续整数 5 2 3 求和后为 5 示例 2
  • B 中等题 LeetCode

    中等题 按出题指数排列 1 2 两数相加 给出两个 非空 的链表用来表示两个非负的整数 其中 xff0c 它们各自的位数是按照 逆序 的方式存储的 xff0c 并且它们的每个节点只能存储 一位 数字 如果 xff0c 我们将这两个数相加起来
  • 回文串 leetcode

    1 125 验证回文串 给定一个字符串 xff0c 验证它是否是回文串 xff0c 只考虑字母和数字字符 xff0c 可以忽略字母的大小写 说明 xff1a 本题中 xff0c 我们将空字符串定义为有效的回文串 示例 1 输入 34 A m
  • 回溯法 题目 leetcode

    1 22 括号生成 数字 n 代表生成括号的对数 xff0c 请你设计一个函数 xff0c 用于能够生成所有可能的并且 有效的 括号组合 示例 xff1a 输入 xff1a n 61 3 输出 xff1a 34 34 34 34 34 34
  • 买卖股票系列问题 Leetcode题目

    leetcode 刷题记录 一 买卖股票系列问题 1 121 买卖股票的最佳时机 给定一个数组 xff0c 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 xff08 即买入和卖出一支股票一次 xff09 x
  • 区间问题 LeetCode

    表示重点复习题 xff0c 没做出来 区间问题 1 56 合并区间 给出一个区间的集合 xff0c 请合并所有重叠的区间 示例 1 输入 intervals 61 1 3 2 6 8 10 15 18 输出 1 6 8 10 15 18 解
  • 网格DFS LeetCode

    岛屿问题 DFS 200 岛屿数量 给你一个由 1 xff08 陆地 xff09 和 0 xff08 水 xff09 组成的的二维网格 xff0c 请你计算网格中岛屿的数量 岛屿总是被水包围 xff0c 并且每座岛屿只能由水平方向和 或竖直
  • 括号题目 Leetcode

    括号系列问题 Leetcode 20 有效的括号 给定一个只包括 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 的字符串 s xff0c 判断字符串是否有
  • 回溯 组合 排列 生成 LeetCode

    回溯 组合 排列 生成 算法题目 77 组合 给定两个整数 n 和 k xff0c 返回 1 n 中所有可能的 k 个数的组合 示例 输入 n 61 4 k 61 2 输出 2 4 3 4 2 3 1 2 1 3 1 4 解法1 回溯 递归
  • Centos 7安装Python3环境

    目录 1 安装依赖环境2 下载Python压缩包3 解压Python压缩包4 编译安装4 1 编译前安装相关软件4 2 创建安装目录4 3 生成编译脚本4 4 编译和安装4 5 检查 5 建立软链接6 设置Python3的环境变量6 1 设
  • Linux命令c++filt

    一个简单的linux命令 xff0c 确实不值得大费周折 xff0c 但是 xff0c 在实际的开发过程中 xff0c 却帮助很大 xff0c 在编译cgi xff0c 修改函数的调用之后获得函数的符号名 xff0c 就可以看到这个函数的定
  • 子序列 子数组问题 Leetcode

    子序列 子数组问题 53 最大子序和 给定一个整数数组 nums xff0c 找到一个具有最大和的连续子数组 xff08 子数组最少包含一个元素 xff09 xff0c 返回其最大和 示例 1 xff1a 输入 xff1a nums 61