class066 一维动态规划【算法】

class066 一维动态规划

算法讲解066【必备】从递归入手一维动态规划

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

code1 509斐波那契数列

// 斐波那契数
// 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列
// 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
// 也就是:F(0) = 0,F(1) = 1
// F(n) = F(n - 1) + F(n - 2),其中 n > 1
// 给定 n ,请计算 F(n)
// 测试链接 : https://leetcode.cn/problems/fibonacci-number/
// 注意:最优解来自矩阵快速幂,时间复杂度可以做到O(log n)
// 后续课程一定会讲述!本节课不涉及!

dp[i]:从F(i)的值
=1,i=1
=i+dp[i-1],i>=2

f1 递归
f2 从顶到底 记忆化搜索
f3 从底到顶
f4 空间优化

package class066;import java.util.Arrays;// 斐波那契数
// 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列
// 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
// 也就是:F(0) = 0,F(1) = 1
// F(n) = F(n - 1) + F(n - 2),其中 n > 1
// 给定 n ,请计算 F(n)
// 测试链接 : https://leetcode.cn/problems/fibonacci-number/
// 注意:最优解来自矩阵快速幂,时间复杂度可以做到O(log n)
// 后续课程一定会讲述!本节课不涉及!
public class Code01_FibonacciNumber {public static int fib1(int n) {return f1(n);}public static int f1(int i) {if (i == 0) {return 0;}if (i == 1) {return 1;}return f1(i - 1) + f1(i - 2);}public static int fib2(int n) {int[] dp = new int[n + 1];Arrays.fill(dp, -1);return f2(n, dp);}public static int f2(int i, int[] dp) {if (i == 0) {return 0;}if (i == 1) {return 1;}if (dp[i] != -1) {return dp[i];}int ans = f2(i - 1, dp) + f2(i - 2, dp);dp[i] = ans;return ans;}public static int fib3(int n) {if (n == 0) {return 0;}if (n == 1) {return 1;}int[] dp = new int[n + 1];dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}public static int fib4(int n) {if (n == 0) {return 0;}if (n == 1) {return 1;}int lastLast = 0, last = 1;for (int i = 2, cur; i <= n; i++) {cur = lastLast + last;lastLast = last;last = cur;}return last;}}

code2 983最低票价

// 最低票价
// 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行
// 在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出
// 每一项是一个从 1 到 365 的整数
// 火车票有 三种不同的销售方式
// 一张 为期1天 的通行证售价为 costs[0] 美元
// 一张 为期7天 的通行证售价为 costs[1] 美元
// 一张 为期30天 的通行证售价为 costs[2] 美元
// 通行证允许数天无限制的旅行
// 例如,如果我们在第 2 天获得一张 为期 7 天 的通行证
// 那么我们可以连着旅行 7 天(第2~8天)
// 返回 你想要完成在给定的列表 days 中列出的每一天的旅行所需要的最低消费
// 测试链接 : https://leetcode.cn/problems/minimum-cost-for-tickets/

dp[i]:以i…天的最低票价
=math.min(cost[k]+dp[j]),(k:3种方案,j:方案到期天数)

f1 递归 有重复调用

[3,4,9,20,50,...]0 1 2 3 41天 1天 1天 1天 f(4,)7天   1天 f(4,)30天      f(4,)

f2 记忆化搜索 带缓存的搜索
f3 动态规划

package class066;import java.util.Arrays;// 最低票价
// 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行
// 在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出
// 每一项是一个从 1 到 365 的整数
// 火车票有 三种不同的销售方式
// 一张 为期1天 的通行证售价为 costs[0] 美元
// 一张 为期7天 的通行证售价为 costs[1] 美元
// 一张 为期30天 的通行证售价为 costs[2] 美元
// 通行证允许数天无限制的旅行
// 例如,如果我们在第 2 天获得一张 为期 7 天 的通行证
// 那么我们可以连着旅行 7 天(第2~8天)
// 返回 你想要完成在给定的列表 days 中列出的每一天的旅行所需要的最低消费
// 测试链接 : https://leetcode.cn/problems/minimum-cost-for-tickets/
public class Code02_MinimumCostForTickets {// 无论提交什么方法都带着这个数组      0  1  2public static int[] durations = { 1, 7, 30 };// 暴力尝试public static int mincostTickets1(int[] days, int[] costs) {return f1(days, costs, 0);}// days[i..... 最少花费是多少 public static int f1(int[] days, int[] costs, int i) {if (i == days.length) {// 后续已经无旅行了return 0;}// i下标 : 第days[i]天,有一场旅行// i.... 最少花费是多少 int ans = Integer.MAX_VALUE;for (int k = 0, j = i; k < 3; k++) {// k是方案编号 : 0 1 2while (j < days.length && days[i] + durations[k] > days[j]) {// 因为方案2持续的天数最多,30天// 所以while循环最多执行30次// 枚举行为可以认为是O(1)j++;}ans = Math.min(ans, costs[k] + f1(days, costs, j));}return ans;}// 暴力尝试改记忆化搜索// 从顶到底的动态规划public static int mincostTickets2(int[] days, int[] costs) {int[] dp = new int[days.length];for (int i = 0; i < days.length; i++) {dp[i] = Integer.MAX_VALUE;}return f2(days, costs, 0, dp);}public static int f2(int[] days, int[] costs, int i, int[] dp) {if (i == days.length) {return 0;}if (dp[i] != Integer.MAX_VALUE) {return dp[i];}int ans = Integer.MAX_VALUE;for (int k = 0, j = i; k < 3; k++) {while (j < days.length && days[i] + durations[k] > days[j]) {j++;}ans = Math.min(ans, costs[k] + f2(days, costs, j, dp));}dp[i] = ans;return ans;}// 严格位置依赖的动态规划// 从底到顶的动态规划public static int MAXN = 366;public static int[] dp = new int[MAXN];public static int mincostTickets3(int[] days, int[] costs) {int n = days.length;Arrays.fill(dp, 0, n + 1, Integer.MAX_VALUE);dp[n] = 0;for (int i = n - 1; i >= 0; i--) {for (int k = 0, j = i; k < 3; k++) {while (j < days.length && days[i] + durations[k] > days[j]) {j++;}dp[i] = Math.min(dp[i], costs[k] + dp[j]);}}return dp[0];}}

code3 91解码方法

// 解码方法
// 一条包含字母 A-Z 的消息通过以下映射进行了 编码 :
// ‘A’ -> “1”
// ‘B’ -> “2”
// …
// ‘Z’ -> “26”
// 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)
// 例如,“11106” 可以映射为:“AAJF”、“KJF”
// 注意,消息不能分组为(1 11 06),因为 “06” 不能映射为 “F”
// 这是由于 “6” 和 “06” 在映射中并不等价
// 给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数
// 题目数据保证答案肯定是一个 32位 的整数
// 测试链接 : https://leetcode.cn/problems/decode-ways/

dp[i]:以i开始的[i…]的解码方法个数
=0,s[i]==‘0’
=dp[i+1]+1
+=dp[i+2],s[i] s[i+1]构成合法解码

f1 递归
f2 记忆化搜索
f3 动态规划

package class066;import java.util.Arrays;// 解码方法
// 一条包含字母 A-Z 的消息通过以下映射进行了 编码 :
// 'A' -> "1"
// 'B' -> "2"
// ...
// 'Z' -> "26"
// 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)
// 例如,"11106" 可以映射为:"AAJF"、"KJF"
// 注意,消息不能分组为(1 11 06),因为 "06" 不能映射为 "F"
// 这是由于 "6" 和 "06" 在映射中并不等价
// 给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数
// 题目数据保证答案肯定是一个 32位 的整数
// 测试链接 : https://leetcode.cn/problems/decode-ways/
public class Code03_DecodeWays {// 暴力尝试public static int numDecodings1(String s) {return f1(s.toCharArray(), 0);}// s : 数字字符串 // s[i....]有多少种有效的转化方案public static int f1(char[] s, int i) {if (i == s.length) {return 1;}int ans;if (s[i] == '0') {ans = 0;} else {ans = f1(s, i + 1);if (i + 1 < s.length && ((s[i] - '0') * 10 + s[i + 1] - '0') <= 26) {ans += f1(s, i + 2);}}return ans;}// 暴力尝试改记忆化搜索public static int numDecodings2(String s) {int[] dp = new int[s.length()];Arrays.fill(dp, -1);return f2(s.toCharArray(), 0, dp);}public static int f2(char[] s, int i, int[] dp) {if (i == s.length) {return 1;}if (dp[i] != -1) {return dp[i];}int ans;if (s[i] == '0') {ans = 0;} else {ans = f2(s, i + 1, dp);if (i + 1 < s.length && ((s[i] - '0') * 10 + s[i + 1] - '0') <= 26) {ans += f2(s, i + 2, dp);}}dp[i] = ans;return ans;}// 严格位置依赖的动态规划public static int numDecodings3(String str) {char[] s = str.toCharArray();int n = s.length;int[] dp = new int[n + 1];dp[n] = 1;for (int i = n - 1; i >= 0; i--) {if (s[i] == '0') {dp[i] = 0;} else {dp[i] = dp[i + 1];if (i + 1 < s.length && ((s[i] - '0') * 10 + s[i + 1] - '0') <= 26) {dp[i] += dp[i + 2];}}}return dp[0];}// 严格位置依赖的动态规划 + 空间压缩public static int numDecodings4(String s) {// dp[i+1]int next = 1;// dp[i+2]int nextNext = 0;for (int i = s.length() - 1, cur; i >= 0; i--) {if (s.charAt(i) == '0') {cur = 0;} else {cur = next;if (i + 1 < s.length() && ((s.charAt(i) - '0') * 10 + s.charAt(i + 1) - '0') <= 26) {cur += nextNext;}}nextNext = next;next = cur;}return next;}}

code4 639解码方法 II

// 解码方法 II
// 一条包含字母 A-Z 的消息通过以下的方式进行了 编码 :
// ‘A’ -> “1”
// ‘B’ -> “2”
// …
// ‘Z’ -> “26”
// 要 解码 一条已编码的消息,所有的数字都必须分组
// 然后按原来的编码方案反向映射回字母(可能存在多种方式)
// 例如,“11106” 可以映射为:“AAJF”、“KJF”
// 注意,像 (1 11 06) 这样的分组是无效的,“06"不可以映射为’F’
// 除了上面描述的数字字母映射方案,编码消息中可能包含 '’ 字符
// 可以表示从 ‘1’ 到 ‘9’ 的任一数字(不包括 ‘0’)
// 例如,"1
” 可以表示 “11”、“12”、“13”、“14”、“15”、“16”、“17”、“18” 或 “19”
// 对 “1*” 进行解码,相当于解码该字符串可以表示的任何编码消息
// 给你一个字符串 s ,由数字和 ‘*’ 字符组成,返回 解码 该字符串的方法 数目
// 由于答案数目可能非常大,返回10^9 + 7的模
// 测试链接 : https://leetcode.cn/problems/decode-ways-ii/

dp[i]:以i开始的[i…]的解码方法个数
=0,s[i]= =‘0’
=dp[i+1]x9,s[i]==‘*’
+=dp[i+2],s[i] s[i+1]构成合法解码

f1 递归
f2 记忆化搜索

package class066;import java.util.Arrays;// 解码方法 II
// 一条包含字母 A-Z 的消息通过以下的方式进行了 编码 :
// 'A' -> "1"
// 'B' -> "2"
// ...
// 'Z' -> "26"
// 要 解码 一条已编码的消息,所有的数字都必须分组
// 然后按原来的编码方案反向映射回字母(可能存在多种方式)
// 例如,"11106" 可以映射为:"AAJF"、"KJF"
// 注意,像 (1 11 06) 这样的分组是无效的,"06"不可以映射为'F'
// 除了上面描述的数字字母映射方案,编码消息中可能包含 '*' 字符
// 可以表示从 '1' 到 '9' 的任一数字(不包括 '0')
// 例如,"1*" 可以表示 "11"、"12"、"13"、"14"、"15"、"16"、"17"、"18" 或 "19"
// 对 "1*" 进行解码,相当于解码该字符串可以表示的任何编码消息
// 给你一个字符串 s ,由数字和 '*' 字符组成,返回 解码 该字符串的方法 数目
// 由于答案数目可能非常大,返回10^9 + 7的模
// 测试链接 : https://leetcode.cn/problems/decode-ways-ii/
public class Code04_DecodeWaysII {// 没有取模逻辑// 最自然的暴力尝试public static int numDecodings1(String str) {return f1(str.toCharArray(), 0);}// s[i....] 有多少种有效转化public static int f1(char[] s, int i) {if (i == s.length) {return 1;}if (s[i] == '0') {return 0;}// s[i] != '0'// 2) i想单独转int ans = f1(s, i + 1) * (s[i] == '*' ? 9 : 1);// 3) i i+1 一起转化 <= 26if (i + 1 < s.length) {// 有i+1位置if (s[i] != '*') {if (s[i + 1] != '*') {// num num//  i  i+1if ((s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {ans += f1(s, i + 2);}} else {// num  *//  i  i+1if (s[i] == '1') {ans += f1(s, i + 2) * 9;}if (s[i] == '2') {ans += f1(s, i + 2) * 6;}}} else {if (s[i + 1] != '*') {// *  num// i  i+1if (s[i + 1] <= '6') {ans += f1(s, i + 2) * 2;} else {ans += f1(s, i + 2);}} else {// *  *// i  i+1// 11 12 ... 19 21 22 ... 26 -> 一共15种可能// 没有10、20,因为*只能变1~9,并不包括0ans += f1(s, i + 2) * 15;}}}return ans;}public static long mod = 1000000007;public static int numDecodings2(String str) {char[] s = str.toCharArray();long[] dp = new long[s.length];Arrays.fill(dp, -1);return (int) f2(s, 0, dp);}public static long f2(char[] s, int i, long[] dp) {if (i == s.length) {return 1;}if (s[i] == '0') {return 0;}if (dp[i] != -1) {return dp[i];}long ans = f2(s, i + 1, dp) * (s[i] == '*' ? 9 : 1);if (i + 1 < s.length) {if (s[i] != '*') {if (s[i + 1] != '*') {if ((s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {ans += f2(s, i + 2, dp);}} else {if (s[i] == '1') {ans += f2(s, i + 2, dp) * 9;}if (s[i] == '2') {ans += f2(s, i + 2, dp) * 6;}}} else {if (s[i + 1] != '*') {if (s[i + 1] <= '6') {ans += f2(s, i + 2, dp) * 2;} else {ans += f2(s, i + 2, dp);}} else {ans += f2(s, i + 2, dp) * 15;}}}ans %= mod;dp[i] = ans;return ans;}public static int numDecodings3(String str) {char[] s = str.toCharArray();int n = s.length;long[] dp = new long[n + 1];dp[n] = 1;for (int i = n - 1; i >= 0; i--) {if (s[i] != '0') {dp[i] = (s[i] == '*' ? 9 : 1) * dp[i + 1];if (i + 1 < n) {if (s[i] != '*') {if (s[i + 1] != '*') {if ((s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {dp[i] += dp[i + 2];}} else {if (s[i] == '1') {dp[i] += dp[i + 2] * 9;}if (s[i] == '2') {dp[i] += dp[i + 2] * 6;}}} else {if (s[i + 1] != '*') {if (s[i + 1] <= '6') {dp[i] += dp[i + 2] * 2;} else {dp[i] += dp[i + 2];}} else {dp[i] += dp[i + 2] * 15;}}}dp[i] %= mod;}}return (int) dp[0];}public static int numDecodings4(String str) {char[] s = str.toCharArray();int n = s.length;long cur = 0, next = 1, nextNext = 0;for (int i = n - 1; i >= 0; i--) {if (s[i] != '0') {cur = (s[i] == '*' ? 9 : 1) * next;if (i + 1 < n) {if (s[i] != '*') {if (s[i + 1] != '*') {if ((s[i] - '0') * 10 + s[i + 1] - '0' <= 26) {cur += nextNext;}} else {if (s[i] == '1') {cur += nextNext * 9;}if (s[i] == '2') {cur += nextNext * 6;}}} else {if (s[i + 1] != '*') {if (s[i + 1] <= '6') {cur += nextNext * 2;} else {cur += nextNext;}} else {cur += nextNext * 15;}}}cur %= mod;}nextNext = next;next = cur;cur = 0;}return (int) next;}}

code5 264. 丑数 II

// 丑数 II
// 给你一个整数 n ,请你找出并返回第 n 个 丑数
// 丑数 就是只包含质因数 2、3 或 5 的正整数
// 测试链接 : https://leetcode.cn/problems/ugly-number-ii/

dp[i]:保存数据
[i2]:x2的指针
[i3]:x3的指针
[i5]:x5的指针

f0 就是现有子集 *2 *3 *5运算得到后续结果
f1 动态规划

package class066;// 丑数 II
// 给你一个整数 n ,请你找出并返回第 n 个 丑数
// 丑数 就是只包含质因数 2、3 或 5 的正整数
// 测试链接 : https://leetcode.cn/problems/ugly-number-ii/
public class Code05_UglyNumberII {// 时间复杂度O(n),n代表第n个丑数public static int nthUglyNumber(int n) {// dp 0 1 2 ...  n//      1 2 ...  ?int[] dp = new int[n + 1];dp[1] = 1;for (int i = 2, i2 = 1, i3 = 1, i5 = 1, a, b, c, cur; i <= n; i++) {a = dp[i2] * 2;b = dp[i3] * 3;c = dp[i5] * 5;cur = Math.min(Math.min(a, b), c);if (cur == a) {i2++;}if (cur == b) {i3++;}if (cur == c) {i5++;}dp[i] = cur;}return dp[n];}}

code6 32. 最长有效括号

// 最长有效括号
// 给你一个只包含 ‘(’ 和 ‘)’ 的字符串
// 找出最长有效(格式正确且连续)括号子串的长度。
// 测试链接 : https://leetcode.cn/problems/longest-valid-parentheses/

dp[i]:以s[i]结尾构成的最长有效括号的长度
=0,s[i]= =‘(’
=dp[p-1]+dp[i-1]+2 s[p]= =‘(’&&s[i]==‘)’
p=i-dp[i-1]-1

f 动态规划

package class066;// 最长有效括号
// 给你一个只包含 '(' 和 ')' 的字符串
// 找出最长有效(格式正确且连续)括号子串的长度。
// 测试链接 : https://leetcode.cn/problems/longest-valid-parentheses/
public class Code06_LongestValidParentheses {// 时间复杂度O(n),n是str字符串的长度public static int longestValidParentheses(String str) {char[] s = str.toCharArray();// dp[0...n-1]// dp[i] : 子串必须以i位置的字符结尾的情况下,往左整体有效的最大长度int[] dp = new int[s.length];int ans = 0;for (int i = 1, p; i < s.length; i++) {if (s[i] == ')') {p = i - dp[i - 1] - 1;//  ?         )//  p         iif (p >= 0 && s[p] == '(') {dp[i] = dp[i - 1] + 2 + (p - 1 >= 0 ? dp[p - 1] : 0);}}ans = Math.max(ans, dp[i]);}return ans;}}

code7 67. 环绕字符串中唯一的子字符串

// 环绕字符串中唯一的子字符串
// 定义字符串 base 为一个 “abcdefghijklmnopqrstuvwxyz” 无限环绕的字符串
// 所以 base 看起来是这样的:
// “…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…”
// 给你一个字符串 s ,请你统计并返回 s 中有多少 不同非空子串 也在 base 中出现
// 测试链接 : https://leetcode.cn/problems/unique-substrings-in-wraparound-string/

dp[?] 以?结尾的子字符串的长度,?26个字母
ans=∑dp(0<=i<26)

f 动态规划

package class066;// 环绕字符串中唯一的子字符串
// 定义字符串 base 为一个 "abcdefghijklmnopqrstuvwxyz" 无限环绕的字符串
// 所以 base 看起来是这样的:
// "..zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd.."
// 给你一个字符串 s ,请你统计并返回 s 中有多少 不同非空子串 也在 base 中出现
// 测试链接 : https://leetcode.cn/problems/unique-substrings-in-wraparound-string/
public class Code07_UniqueSubstringsWraparoundString {// 时间复杂度O(n),n是字符串s的长度,字符串base长度为正无穷public static int findSubstringInWraproundString(String str) {int n = str.length();int[] s = new int[n];// abcde...z -> 0, 1, 2, 3, 4....25for (int i = 0; i < n; i++) {s[i] = str.charAt(i) - 'a';}// dp[0] : s中必须以'a'的子串,最大延伸长度是多少,延伸一定要跟据base串的规则int[] dp = new int[26];// s : c d e....//     2 3 4dp[s[0]] = 1;for (int i = 1, cur, pre, len = 1; i < n; i++) {cur = s[i];pre = s[i - 1];// pre curif ((pre == 25 && cur == 0) || pre + 1 == cur) {// (前一个字符是'z' && 当前字符是'a') || 前一个字符比当前字符的ascii码少1len++;} else {len = 1;}dp[cur] = Math.max(dp[cur], len);}int ans = 0;for (int i = 0; i < 26; i++) {ans += dp[i];}return ans;}}

code8 940. 不同的子序列 II

// 不同的子序列 II
// 给定一个字符串 s,计算 s 的 不同非空子序列 的个数
// 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余
// 字符串的 子序列 是经由原字符串删除一些(也可能不删除)
// 字符但不改变剩余字符相对位置的一个新字符串
// 例如,“ace” 是 “abcde” 的一个子序列,但 “aec” 不是
// 测试链接 : https://leetcode.cn/problems/distinct-subsequences-ii/

f 动态规划

package class066;// 不同的子序列 II
// 给定一个字符串 s,计算 s 的 不同非空子序列 的个数
// 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余
// 字符串的 子序列 是经由原字符串删除一些(也可能不删除)
// 字符但不改变剩余字符相对位置的一个新字符串
// 例如,"ace" 是 "abcde" 的一个子序列,但 "aec" 不是
// 测试链接 : https://leetcode.cn/problems/distinct-subsequences-ii/
public class Code08_DistinctSubsequencesII {// 时间复杂度O(n),n是字符串s的长度public static int distinctSubseqII(String s) {int mod = 1000000007;char[] str = s.toCharArray();int[] cnt = new int[26];int all = 1, newAdd;for (char x : str) {newAdd = (all - cnt[x - 'a'] + mod) % mod;cnt[x - 'a'] = (cnt[x - 'a'] + newAdd) % mod;all = (all + newAdd) % mod;}return (all - 1 + mod) % mod;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kotlin - ViewBinding

前言 为什么用ViewBinding&#xff0c;而不用findViewById()&#xff0c;这个有很多优秀的博主都做了讲解&#xff0c;就不再列出了。 可参考下列博主的文章&#xff1a; kotlin ViewBinding的使用 文章里也给出了如何在gradle中做出相应的配置。 &#xff08;我建议先看这位博…

【LeetCode热题100】【滑动窗口】无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无…

Redis,什么是缓存穿透?怎么解决?

Redis&#xff0c;什么是缓存穿透&#xff1f;怎么解决&#xff1f; 1、缓存穿透 一般的缓存系统&#xff0c;都是按照key去缓存查询&#xff0c;如果不存在对用的value&#xff0c;就应该去后端系统查找&#xff08;比如DB数据库&#xff09;。一些恶意的请求会故意查询不存在…

不想写大量 if 判断?试试用规则执行器优化,就很丝滑!

近日在公司领到一个小需求&#xff0c;需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示: if (是否海外用户) {return false; }if (刷单用户) {return false; }if (未付费用户 && 不再服务时段) {return false }if (转介绍用户 || 付费用户 || 内推…

16ASM 分段和机器码

8086CPU存储分段管理 问题1&#xff1a;8086是16位cpu&#xff0c;最多可访问&#xff08;寻址&#xff09;多大内存&#xff1f; 运算器一次最多处理16位的数据。地址寄存器的最大宽度为16位。访问的最大内存为&#xff1a;216 64K 即 0000 - FFFF。 问题2&#xff1a;808…

WIFI直连(Wi-Fi P2P)

一、概述 Wifi peer-to-peer&#xff08;也称Wifi-Direct&#xff09;是Wifi联盟推出的一项基于原来WIfi技术的可以让设备与设备间直接连接的技术&#xff0c;使用户不需要借助局域网或者AP&#xff08;Access Point&#xff09;就可以进行一对一或一对多通信。这种技术的应用…

计算机毕业设计 SpringBoot的乐乐农产品销售系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Xmanager

什么是 XManager Xmanager 是市场上领先的 PC X 服务器&#xff0c;可将X应用程序的强大功能带入 Windows 环境。 提供了强大的会话管理控制台&#xff0c;易于使用的 X 应用程序启动器&#xff0c;X 服务器配置文件管理工具&#xff0c;SSH 模块和高性能 PC X 服务器。 Xman…

javaScript(六):DOM操作

文章目录 1、DOM介绍2、DOM&#xff1a;获取Element对象3、DOM&#xff1a;事件监听3.1、事件介绍3.2、常见事件3.3、设置事件的两种方式3.4、事件案例 1、DOM介绍 概念 Document Object Model &#xff0c;文档对象模型 将标记语言的各个组成部分封装为对应的对象&#xff1a…

Realme X7 Pro Root 刷机教程

Realme X7 Pro 刷机教程 Just For Fun&#xff0c;最近倒腾了下Realme X7 Pro 刷root。此博客为个人记录刷机过程&#xff0c;如有机友跟随本教程操作&#xff0c;请谨慎操作&#xff01;&#xff01;&#xff01; 以下教程真针对Realme X7 Pro&#xff0c;其他版本方法未知&…

【Flutter】vs2022上开发flutter

在vs上开发flutter&#xff0c;结果扩展仓库上没办法找到Dart&#xff0c;Flutter。 在 这 搜索Dart时也无法找到插件。 最后发现是安装工具出错了 安装了 开发需要的是

从线性回归到神经网络

目录 一、线性回归关键思想 1、线性模型 2、基础优化算法 二、线性回归的从零开始实现 1、生成数据集 2、读取数据集 3、初始化模型参数 4、定义模型 5、定义损失函数 6、定义优化算法 7、训练 三、线性回归的简洁实现 1、生成数据集 2、读取数据集 3、定义模型…

论文代码阅读:TGN模型训练阶段代码理解

文章目录 [toc] TGN模型训练阶段代码理解论文信息代码过程手绘代码训练过程compute_temporal_embeddingsupdate_memoryget_raw_messagesget_updated_memoryself.message_aggregator.aggregateself.memory_updater.get_updated_memoryMemoryget_embedding_moduleGraphAttentionE…

【AIGC】Midjourney高级进阶版

Midjourney 真是越玩越上头&#xff0c;真是给它的想象力跪了~ 研究了官方API&#xff0c;出一个进阶版教程 命令 旨在介绍Midjourney在Discord频道中的文本框中支持的指令。 1&#xff09;shorten 简化Prompt 该指令可以将输入的Prompt为模型可以理解的语言。模型理解语言…

【Linux】如何对文本文件进行有条件地划分?——cut命令

cut 命令可以根据一个指定的标记&#xff08;默认是 tab&#xff09;来为文本划分列&#xff0c;然后将此列显示。 例如想要显示 passwd 文件的第一列可以使用以下命令&#xff1a;cut –f 1 –d : /etc/passwd cut&#xff1a;用于从文件的每一行中提取部分内容的命令。-f 1&…

Sql server数据库数据查询

请查询学生信息表的所有记录。 答&#xff1a;查询所需的代码如下&#xff1a; USE 学生管理数据库 GO SELECT * FROM 学生信息表 执行结果如下&#xff1a; 查询学生的学号、姓名和性别。 答&#xff1a;查询所需的代码如下&#xff1a; USE 学生管理数据库 GO SELE…

为什么需要 Kubernetes,它能做什么?

传统部署时代&#xff1a; 早期&#xff0c;各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用&#xff0c;因此会导致资源分配问题。 例如&#xff0c;如果在同一台物理服务器上运行多个应用程序&#xff0c; 则可能会出现一个应用程…

【QED】高昂的猫 Ⅰ

目录 题目背景题目描述输入格式输出格式 测试样例样例说明数据范围 思路核心代码 题目背景 这是小橘。因为它总是看起来很高傲&#xff0c;所以人送外号“高昂的猫”。 题目描述 "锕狗"的房间里放着 n n n ( 1 ≤ n ≤ 1 0 9 ) (1 \leq n \leq 10^9) (1≤n≤109)个…

C# 使用CancellationTokenSource 取消Task执行

写在前面 在Task创建并执行后&#xff0c;如果状态发生了变化&#xff0c;需要取消正在执行中的Task&#xff0c;除了使用主线程上的共享变量来判断之外&#xff0c;更优雅的方式就是就是用CancellationTokenSource来取消任务的执行。 代码实现 public static void CancelTas…

基于ssm高校实验室管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校实验室信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性…