【每日力扣】300. 最长递增子序列 与 139. 单词拆分

🔥 个人主页: 黑洞晓威

😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害

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. 创建一个和原数组长度相同的数组 dp,用来存放到每个位置为止的最长递增子序列的长度。
  2. 初始化 dp[i] 为 1(因为每个单独的元素本身就是一个递增子序列)。
  3. 对于每个位置 i,遍历其之前的位置 j,如果 nums[j] < nums[i],则更新 dp[i] = Math.max(dp[i], dp[j] + 1)
  4. 最终,dp 数组中的最大值即为最长递增子序列的长度。

代码实现

java 复制代码
class Solution {
    public int lengthOfLIS(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int n = nums.length;
        int[] dp = new int[n];
        Arrays.fill(dp, 1);

        int maxLength = 1;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[j] < nums[i]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
            maxLength = Math.max(maxLength, dp[i]);
        }

        return maxLength;
    }
}

139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

**注意:**不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

复制代码
输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

解题思路

  1. 创建一个布尔数组 dpdp[i] 表示从字符串 s 的开头到第 i 个字符是否可以被字典拆分。
  2. 初始化 dp[0]true,因为空字符串可以被拆分为字典内的单词。
  3. 遍历字符串 s,对于每个位置 i,遍历之前的位置 j0 <= j < i),如果 dp[j]true 且从位置 j 到位置 i 的子串在字典中存在,则更新 dp[i] = true
  4. 最后返回 dp[s.length()] 的值。

代码实现

java 复制代码
class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> dict = new HashSet<>(wordDict);
        int n = s.length();
        boolean[] dp = new boolean[n + 1];
        dp[0] = true;

        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < i; j++) {
                if (dp[j] && dict.contains(s.substring(j, i))) {
                    dp[i] = true;
                    break;
                }
            }
        }

        return dp[n];
    }
}
相关推荐
FPGA18 分钟前
CRC校验原理及其FPGA实现
算法
Jina AI26 分钟前
回归C++: 在GGUF上构建高效的向量模型
人工智能·算法·机器学习·数据挖掘·回归
程序员曦曦27 分钟前
10:00开始面试,10:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
Coovally AI模型快速验证31 分钟前
YOLO、DarkNet和深度学习如何让自动驾驶看得清?
深度学习·算法·yolo·cnn·自动驾驶·transformer·无人机
luoqice37 分钟前
linux下找到指定目录下最新日期log文件
linux·算法
楽码1 小时前
底层技术SwissTable的实现对比
数据结构·后端·算法
fffcccc11121 小时前
初级背包问题,层层剖析为什么这样做。最好需要自己推演一遍。
算法
瓦特what?2 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
楽码3 小时前
自动修复GoVet:语言实现对比
后端·算法·编程语言
是乐谷3 小时前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算