class067 二維動態規劃【算法】

class067 二維動態規劃

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

code1 64. 最小路徑和

// 最小路徑和
// 給定一個包含非負整數的 m x n 網格 grid
// 請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
// 說明:每次只能向下或者向右移動一步。
// 測試鏈接 : https://leetcode.cn/problems/minimum-path-sum/

dp[i][j]:從(0,0)到(i,j)最小路徑 和
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]

第0行:dp[0][j-1]+grid[0][j]
第0列:dp[i-1][0]+grid[i-1][0]

code1 暴力遞歸
code2 記憶化搜索
code3 動態規劃
code4 空間壓縮

package class067;// 最小路徑和
// 給定一個包含非負整數的 m x n 網格 grid
// 請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
// 說明:每次只能向下或者向右移動一步。
// 測試鏈接 : https://leetcode.cn/problems/minimum-path-sum/
public class Code01_MinimumPathSum {// 暴力遞歸public static int minPathSum1(int[][] grid) {return f1(grid, grid.length - 1, grid[0].length - 1);}// 從(0,0)到(i,j)最小路徑和// 一定每次只能向右或者向下public static int f1(int[][] grid, int i, int j) {if (i == 0 && j == 0) {return grid[0][0];}int up = Integer.MAX_VALUE;int left = Integer.MAX_VALUE;if (i - 1 >= 0) {up = f1(grid, i - 1, j);}if (j - 1 >= 0) {left = f1(grid, i, j - 1);}return grid[i][j] + Math.min(up, left);}// 記憶化搜索public static int minPathSum2(int[][] grid) {int n = grid.length;int m = grid[0].length;int[][] dp = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {dp[i][j] = -1;}}return f2(grid, grid.length - 1, grid[0].length - 1, dp);}public static int f2(int[][] grid, int i, int j, int[][] dp) {if (dp[i][j] != -1) {return dp[i][j];}int ans;if (i == 0 && j == 0) {ans = grid[0][0];} else {int up = Integer.MAX_VALUE;int left = Integer.MAX_VALUE;if (i - 1 >= 0) {up = f2(grid, i - 1, j, dp);}if (j - 1 >= 0) {left = f2(grid, i, j - 1, dp);}ans = grid[i][j] + Math.min(up, left);}dp[i][j] = ans;return ans;}// 嚴格位置依賴的動態規劃public static int minPathSum3(int[][] grid) {int n = grid.length;int m = grid[0].length;int[][] dp = new int[n][m];dp[0][0] = grid[0][0];for (int i = 1; i < n; i++) {dp[i][0] = dp[i - 1][0] + grid[i][0];}for (int j = 1; j < m; j++) {dp[0][j] = dp[0][j - 1] + grid[0][j];}for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}}return dp[n - 1][m - 1];}// 嚴格位置依賴的動態規劃 + 空間壓縮技巧public static int minPathSum4(int[][] grid) {int n = grid.length;int m = grid[0].length;// 先讓dp表,變成想象中的表的第0行的數據int[] dp = new int[m];dp[0] = grid[0][0];for (int j = 1; j < m; j++) {dp[j] = dp[j - 1] + grid[0][j];}for (int i = 1; i < n; i++) {// i = 1,dp表變成想象中二維表的第1行的數據// i = 2,dp表變成想象中二維表的第2行的數據// i = 3,dp表變成想象中二維表的第3行的數據// ...// i = n-1,dp表變成想象中二維表的第n-1行的數據dp[0] += grid[i][0];for (int j = 1; j < m; j++) {dp[j] = Math.min(dp[j - 1], dp[j]) + grid[i][j];}}return dp[m - 1];}}

code2 79. 單詞搜索

// 單詞搜索(無法改成動態規劃)
// 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word
// 如果 word 存在于網格中,返回 true ;否則,返回 false 。
// 單詞必須按照字母順序,通過相鄰的單元格內的字母構成
// 其中"相鄰"單元格是那些水平相鄰或垂直相鄰的單元格
// 同一個單元格內的字母不允許被重復使用
// 測試鏈接 : https://leetcode.cn/problems/word-search/

code 遞歸

package class067;// 單詞搜索(無法改成動態規劃)
// 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word
// 如果 word 存在于網格中,返回 true ;否則,返回 false 。
// 單詞必須按照字母順序,通過相鄰的單元格內的字母構成
// 其中"相鄰"單元格是那些水平相鄰或垂直相鄰的單元格
// 同一個單元格內的字母不允許被重復使用
// 測試鏈接 : https://leetcode.cn/problems/word-search/
public class Code02_WordSearch {public static boolean exist(char[][] board, String word) {char[] w = word.toCharArray();for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[0].length; j++) {if (f(board, i, j, w, 0)) {return true;}}}return false;}// 因為board會改其中的字符// 用來標記哪些字符無法再用// 帶路徑的遞歸無法改成動態規劃或者說沒必要// 從(i,j)出發,來到w[k],請問后續能不能把word走出來w[k...]public static boolean f(char[][] b, int i, int j, char[] w, int k) {if (k == w.length) {return true;}if (i < 0 || i == b.length || j < 0 || j == b[0].length || b[i][j] != w[k]) {return false;}// 不越界,b[i][j] == w[k]char tmp = b[i][j];b[i][j] = 0;boolean ans = f(b, i - 1, j, w, k + 1) || f(b, i + 1, j, w, k + 1) || f(b, i, j - 1, w, k + 1)|| f(b, i, j + 1, w, k + 1);b[i][j] = tmp;return ans;}}

code3 1143. 最長公共子序列

// 最長公共子序列
// 給定兩個字符串text1和text2
// 返回這兩個字符串的最長 公共子序列 的長度
// 如果不存在公共子序列,返回0
// 兩個字符串的 公共子序列 是這兩個字符串所共同擁有的子序列
// 測試鏈接 : https://leetcode.cn/problems/longest-common-subsequence/

dp[i][j]:text1[前i個]和text2[前j個]最長公共子序列的長度
dp[i-1][j-1]+1,text1[i-1]==text2[j-1]
max(dp[i-1][j],dp[i][j-1])

第0行 :0
第0列: 0

code1 遞歸
code2 遞歸
code3 記憶化搜索
code4 動態規劃
code5 空間壓縮

package class067;// 最長公共子序列
// 給定兩個字符串text1和text2
// 返回這兩個字符串的最長 公共子序列 的長度
// 如果不存在公共子序列,返回0
// 兩個字符串的 公共子序列 是這兩個字符串所共同擁有的子序列
// 測試鏈接 : https://leetcode.cn/problems/longest-common-subsequence/
public class Code03_LongestCommonSubsequence {public static int longestCommonSubsequence1(String str1, String str2) {char[] s1 = str1.toCharArray();char[] s2 = str2.toCharArray();int n = s1.length;int m = s2.length;return f1(s1, s2, n - 1, m - 1);}// s1[0....i1]與s2[0....i2]最長公共子序列長度public static int f1(char[] s1, char[] s2, int i1, int i2) {if (i1 < 0 || i2 < 0) {return 0;}int p1 = f1(s1, s2, i1 - 1, i2 - 1);int p2 = f1(s1, s2, i1 - 1, i2);int p3 = f1(s1, s2, i1, i2 - 1);int p4 = s1[i1] == s2[i2] ? (p1 + 1) : 0;return Math.max(Math.max(p1, p2), Math.max(p3, p4));}// 為了避免很多邊界討論// 很多時候往往不用下標來定義嘗試,而是用長度來定義嘗試// 因為長度最短是0,而下標越界的話討論起來就比較麻煩public static int longestCommonSubsequence2(String str1, String str2) {char[] s1 = str1.toCharArray();char[] s2 = str2.toCharArray();int n = s1.length;int m = s2.length;return f2(s1, s2, n, m);}// s1[前綴長度為len1]對應s2[前綴長度為len2]// 最長公共子序列長度public static int f2(char[] s1, char[] s2, int len1, int len2) {if (len1 == 0 || len2 == 0) {return 0;}int ans;if (s1[len1 - 1] == s2[len2 - 1]) {ans = f2(s1, s2, len1 - 1, len2 - 1) + 1;} else {ans = Math.max(f2(s1, s2, len1 - 1, len2), f2(s1, s2, len1, len2 - 1));}return ans;}// 記憶化搜索public static int longestCommonSubsequence3(String str1, String str2) {char[] s1 = str1.toCharArray();char[] s2 = str2.toCharArray();int n = s1.length;int m = s2.length;int[][] dp = new int[n + 1][m + 1];for (int i = 0; i <= n; i++) {for (int j = 0; j <= m; j++) {dp[i][j] = -1;}}return f3(s1, s2, n, m, dp);}public static int f3(char[] s1, char[] s2, int len1, int len2, int[][] dp) {if (len1 == 0 || len2 == 0) {return 0;}if (dp[len1][len2] != -1) {return dp[len1][len2];}int ans;if (s1[len1 - 1] == s2[len2 - 1]) {ans = f3(s1, s2, len1 - 1, len2 - 1, dp) + 1;} else {ans = Math.max(f3(s1, s2, len1 - 1, len2, dp), f3(s1, s2, len1, len2 - 1, dp));}dp[len1][len2] = ans;return ans;}// 嚴格位置依賴的動態規劃public static int longestCommonSubsequence4(String str1, String str2) {char[] s1 = str1.toCharArray();char[] s2 = str2.toCharArray();int n = s1.length;int m = s2.length;int[][] dp = new int[n + 1][m + 1];for (int len1 = 1; len1 <= n; len1++) {for (int len2 = 1; len2 <= m; len2++) {if (s1[len1 - 1] == s2[len2 - 1]) {dp[len1][len2] = 1 + dp[len1 - 1][len2 - 1];} else {dp[len1][len2] = Math.max(dp[len1 - 1][len2], dp[len1][len2 - 1]);}}}return dp[n][m];}// 嚴格位置依賴的動態規劃 + 空間壓縮public static int longestCommonSubsequence5(String str1, String str2) {char[] s1, s2;if (str1.length() >= str2.length()) {s1 = str1.toCharArray();s2 = str2.toCharArray();} else {s1 = str2.toCharArray();s2 = str1.toCharArray();}int n = s1.length;int m = s2.length;int[] dp = new int[m + 1];for (int len1 = 1; len1 <= n; len1++) {int leftUp = 0, backup;for (int len2 = 1; len2 <= m; len2++) {backup = dp[len2];if (s1[len1 - 1] == s2[len2 - 1]) {dp[len2] = 1 + leftUp;} else {dp[len2] = Math.max(dp[len2], dp[len2 - 1]);}leftUp = backup;}}return dp[m];}}

code4 516. 最長回文子序列

// 最長回文子序列
// 給你一個字符串 s ,找出其中最長的回文子序列,并返回該序列的長度
// 測試鏈接 : https://leetcode.cn/problems/longest-palindromic-subsequence/

dp[i][j]:從[i,j]字符中有最長回文子序列的長度
1,i=j
1/2,s[i]==s[j],i+1=j
2+dp[i+1][j-1],s[i]==s[j]
max(dp[i+1][j],dp[i][j-1])

從左到右,從下到上

code1 遞歸
code2 記憶化搜索
code3 動態規劃
code4 空間壓縮

package class067;// 最長回文子序列
// 給你一個字符串 s ,找出其中最長的回文子序列,并返回該序列的長度
// 測試鏈接 : https://leetcode.cn/problems/longest-palindromic-subsequence/
public class Code04_LongestPalindromicSubsequence {// 最長回文子序列問題可以轉化成最長公共子序列問題// 不過這里講述區間動態規劃的思路// 區間dp還會有單獨的視頻做詳細講述public static int longestPalindromeSubseq1(String str) {char[] s = str.toCharArray();int n = s.length;return f1(s, 0, n - 1);}// s[l...r]最長回文子序列長度// l <= rpublic static int f1(char[] s, int l, int r) {if (l == r) {return 1;}if (l + 1 == r) {return s[l] == s[r] ? 2 : 1;}if (s[l] == s[r]) {return 2 + f1(s, l + 1, r - 1);} else {return Math.max(f1(s, l + 1, r), f1(s, l, r - 1));}}public static int longestPalindromeSubseq2(String str) {char[] s = str.toCharArray();int n = s.length;int[][] dp = new int[n][n];return f2(s, 0, n - 1, dp);}public static int f2(char[] s, int l, int r, int[][] dp) {if (l == r) {return 1;}if (l + 1 == r) {return s[l] == s[r] ? 2 : 1;}if (dp[l][r] != 0) {return dp[l][r];}int ans;if (s[l] == s[r]) {ans = 2 + f2(s, l + 1, r - 1, dp);} else {ans = Math.max(f2(s, l + 1, r, dp), f2(s, l, r - 1, dp));}dp[l][r] = ans;return ans;}public static int longestPalindromeSubseq3(String str) {char[] s = str.toCharArray();int n = s.length;int[][] dp = new int[n][n];for (int l = n - 1; l >= 0; l--) {dp[l][l] = 1;if (l + 1 < n) {dp[l][l + 1] = s[l] == s[l + 1] ? 2 : 1;}for (int r = l + 2; r < n; r++) {if (s[l] == s[r]) {dp[l][r] = 2 + dp[l + 1][r - 1];} else {dp[l][r] = Math.max(dp[l + 1][r], dp[l][r - 1]);}}}return dp[0][n - 1];}public static int longestPalindromeSubseq4(String str) {char[] s = str.toCharArray();int n = s.length;int[] dp = new int[n];for (int l = n - 1, leftDown = 0, backup; l >= 0; l--) {// dp[l] : 想象中的dp[l][l]dp[l] = 1;if (l + 1 < n) {leftDown = dp[l + 1];// dp[l+1] : 想象中的dp[l][l+1]dp[l + 1] = s[l] == s[l + 1] ? 2 : 1;}for (int r = l + 2; r < n; r++) {backup = dp[r];if (s[l] == s[r]) {dp[r] = 2 + leftDown;} else {dp[r] = Math.max(dp[r], dp[r - 1]);}leftDown = backup;}}return dp[n - 1];}}

code5 節點數為n高度不大于m的二叉樹個數

// 節點數為n高度不大于m的二叉樹個數
// 現在有n個節點,計算出有多少個不同結構的二叉樹
// 滿足節點個數為n且樹的高度不超過m的方案
// 因為答案很大,所以答案需要模上1000000007后輸出
// 測試鏈接 : https://www.nowcoder.com/practice/aaefe5896cce4204b276e213e725f3ea
// 請同學們務必參考如下代碼中關于輸入、輸出的處理
// 這是輸入輸出處理效率很高的寫法
// 提交以下所有代碼,把主類名改成Main,可以直接通過

思路:就是頭占1個,左右占[0,n-1]
dp[i][j]:節點數為i高度不大于j的二叉樹個數
∑dp[k][j-1]*dp[i-k-1][j-1],(0<=k<=i)

package class067;// 節點數為n高度不大于m的二叉樹個數
// 現在有n個節點,計算出有多少個不同結構的二叉樹
// 滿足節點個數為n且樹的高度不超過m的方案
// 因為答案很大,所以答案需要模上1000000007后輸出
// 測試鏈接 : https://www.nowcoder.com/practice/aaefe5896cce4204b276e213e725f3ea
// 請同學們務必參考如下代碼中關于輸入、輸出的處理
// 這是輸入輸出處理效率很高的寫法
// 提交以下所有代碼,把主類名改成Main,可以直接通過import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Code05_NodenHeightNotLargerThanm {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {int n = (int) in.nval;in.nextToken();int m = (int) in.nval;out.println(compute3(n, m));}out.flush();out.close();br.close();}public static int MAXN = 51;public static int MOD = 1000000007;// 記憶化搜索public static long[][] dp1 = new long[MAXN][MAXN];static {for (int i = 0; i < MAXN; i++) {for (int j = 0; j < MAXN; j++) {dp1[i][j] = -1;}}}// 二叉樹節點數為n// 高度不能超過m// 結構數返回// 記憶化搜索public static int compute1(int n, int m) {if (n == 0) {return 1;}// n > 0if (m == 0) {return 0;}if (dp1[n][m] != -1) {return (int) dp1[n][m];}long ans = 0;// n個點,頭占掉1個for (int k = 0; k < n; k++) {// 一共n個節點,頭節點已經占用了1個名額// 如果左樹占用k個,那么右樹就占用i-k-1個ans = (ans + ((long) compute1(k, m - 1) * compute1(n - k - 1, m - 1)) % MOD) % MOD;}dp1[n][m] = ans;return (int) ans;}// 嚴格位置依賴的動態規劃public static long[][] dp2 = new long[MAXN][MAXN];public static int compute2(int n, int m) {for (int j = 0; j <= m; j++) {dp2[0][j] = 1;}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {dp2[i][j] = 0;for (int k = 0; k < i; k++) {// 一共i個節點,頭節點已經占用了1個名額// 如果左樹占用k個,那么右樹就占用i-k-1個dp2[i][j] = (dp2[i][j] + dp2[k][j - 1] * dp2[i - k - 1][j - 1] % MOD) % MOD;}}}return (int) dp2[n][m];}// 空間壓縮public static long[] dp3 = new long[MAXN];public static int compute3(int n, int m) {dp3[0] = 1;for (int i = 1; i <= n; i++) {dp3[i] = 0;}for (int j = 1; j <= m; j++) {// 根據依賴,一定要先枚舉列for (int i = n; i >= 1; i--) {// 再枚舉行,而且i不需要到達0,i>=1即可dp3[i] = 0;for (int k = 0; k < i; k++) {// 枚舉dp3[i] = (dp3[i] + dp3[k] * dp3[i - k - 1] % MOD) % MOD;}}}return (int) dp3[n];}}

code6 329. 矩陣中的最長遞增路徑

// 矩陣中的最長遞增路徑
// 給定一個 m x n 整數矩陣 matrix ,找出其中 最長遞增路徑 的長度
// 對于每個單元格,你可以往上,下,左,右四個方向移動
// 你 不能 在 對角線 方向上移動或移動到 邊界外(即不允許環繞)
// 測試鏈接 : https://leetcode.cn/problems/longest-increasing-path-in-a-matrix/

dp[i][j]:從(i,j)出發到達的最長遞增路徑
max(dp[i-1][j],dp[i+1][j],dp[i][j-1],dp[i][j+1])+1,只有對應大才能走

code1 遞歸
code2 記憶化搜索

package class067;// 矩陣中的最長遞增路徑
// 給定一個 m x n 整數矩陣 matrix ,找出其中 最長遞增路徑 的長度
// 對于每個單元格,你可以往上,下,左,右四個方向移動
// 你 不能 在 對角線 方向上移動或移動到 邊界外(即不允許環繞)
// 測試鏈接 : https://leetcode.cn/problems/longest-increasing-path-in-a-matrix/
public class Code06_LongestIncreasingPath {public static int longestIncreasingPath1(int[][] grid) {int ans = 0;for (int i = 0; i < grid.length; i++) {for (int j = 0; j < grid[0].length; j++) {ans = Math.max(ans, f1(grid, i, j));}}return ans;}// 從(i,j)出發,能走出來多長的遞增路徑,返回最長長度public static int f1(int[][] grid, int i, int j) {int next = 0;if (i > 0 && grid[i][j] < grid[i - 1][j]) {next = Math.max(next, f1(grid, i - 1, j));}if (i + 1 < grid.length && grid[i][j] < grid[i + 1][j]) {next = Math.max(next, f1(grid, i + 1, j));}if (j > 0 && grid[i][j] < grid[i][j - 1]) {next = Math.max(next, f1(grid, i, j - 1));}if (j + 1 < grid[0].length && grid[i][j] < grid[i][j + 1]) {next = Math.max(next, f1(grid, i, j + 1));}return next + 1;}public static int longestIncreasingPath2(int[][] grid) {int n = grid.length;int m = grid[0].length;int[][] dp = new int[n][m];int ans = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {ans = Math.max(ans, f2(grid, i, j, dp));}}return ans;}public static int f2(int[][] grid, int i, int j, int[][] dp) {if (dp[i][j] != 0) {return dp[i][j];}int next = 0;if (i > 0 && grid[i][j] < grid[i - 1][j]) {next = Math.max(next, f2(grid, i - 1, j, dp));}if (i + 1 < grid.length && grid[i][j] < grid[i + 1][j]) {next = Math.max(next, f2(grid, i + 1, j, dp));}if (j > 0 && grid[i][j] < grid[i][j - 1]) {next = Math.max(next, f2(grid, i, j - 1, dp));}if (j + 1 < grid[0].length && grid[i][j] < grid[i][j + 1]) {next = Math.max(next, f2(grid, i, j + 1, dp));}dp[i][j] = next + 1;return next + 1;}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

<JavaEE> 經典設計模式之 -- 線程池

目錄 一、線程池的概念 二、Java 標準庫中的線程池類 2.1 ThreadPoolExecutor 類 2.1.1 corePoolSize 和 maximumPoolSize 2.1.2 keepAliveTime 和 unit 2.1.3 workQueue 2.1.4 threadFactory 2.1.5 handler 2.1.6 創建一個參數自定義的線程池 2.2 Executors 類 2.3…

go學習筆記(17)Blob and ArrayBuffer

最近在學習go websocket的時候&#xff0c;在學習實驗過程遇到一個比較奇怪問題。為什么我的數據返回是blob&#xff0c;而不是arrayBuffer&#xff1f;百思不得其解。 直到同事打包的時候微信小游戲遇到了一個報錯。FileReader不支持。 經過在社區查詢&#xff0c;官方答復是…

Qt之QCache和QContiguousCache

一.QCache QCache在構造的時候指定了緩存中允許的最大成本,也就是如下構造函數中的參數maxCost。默認情況下,QCaches maxCost() 是100。 QCache(int maxCost = 100) ~QCache() void clear() bool contains(const Key &key) const int count() const bool insert(const …

[原創] 電源芯片輸出端的紋波測試

網上有很多文章講解&#xff0c;電源芯片的紋波測試&#xff0c;原理圖各種講解&#xff0c;理論有余&#xff0c;實質性測試細節不夠細致&#xff0c;想寫一些測試步驟&#xff0c;作為分享和記錄。 1、設置示波器參數 1.1 校準示波器 1.2 探頭按鈕推到X1&#xff08;代表波…

[RoBERTa]論文實現:RoBERTa: A Robustly Optimized BERT Pretraining Approach

文章目錄 一、完整代碼二、論文解讀2.1 模型架構2.2 參數設置2.3 數據2.4 評估 三、對比四、整體總結 論文&#xff1a;RoBERTa&#xff1a;A Robustly Optimized BERT Pretraining Approach 作者&#xff1a;Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Da…

【Qt5】Q_UNUSED()

2023年12月9日&#xff0c;周六晚上 Q_UNUSED()是一個用于告訴編譯器不使用&#xff08;或者未使用&#xff09;特定變量的宏。 有時候&#xff0c;在函數簽名中聲明了某些參數&#xff0c;但是在函數體內并沒有使用它們。這可能是因為在某些情況下&#xff0c;函數可能需要接…

P10 Linux進程編程 fork創建子進程

目錄 前言 01 fork()創建子進程 示例 1使用 fork()創建子進程。 02 fork創建新進程時發生了什么事&#xff1f; 2.1 父、子進程中對應的文件描述符指向了相同的文件表 前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《Linux C應用編程&#xf…

異步回調模式

異步回調 所謂異步回調&#xff0c;本質上就是多線程中線程的通信&#xff0c;如今很多業務系統中&#xff0c;某個業務或者功能調用多個外部接口&#xff0c;通常這種調用就是異步的調用。如何得到這些異步調用的結果自然也就很重要了。 Callable、Future、FutureTask publi…

半導體劃片機助力氧化鋁陶瓷片切割:科技與工藝的完美結合

在當今半導體制造領域&#xff0c;氧化鋁陶瓷片作為一種高性能、高可靠性的材料&#xff0c;被廣泛應用于各種電子設備中。而半導體劃片機的出現&#xff0c;則為氧化鋁陶瓷片的切割提供了新的解決方案&#xff0c;實現了科技與工藝的完美結合。 氧化鋁陶瓷片是一種以氧化鋁為基…

《巫師3》缺失vcomp110.dll如何解決,如何快速修復vcomp110.dll丟失問題

在日常使用電腦的過程中&#xff0c;我們可能會遇到一些錯誤提示&#xff0c;其中之一就是“vcomp110.dll丟失”。這個錯誤提示通常意味著vcomp110.dll文件在系統中無法找到或加載。那么&#xff0c;vcomp110.dll丟失的原因是什么&#xff1f;它對電腦有什么影響&#xff1f;本…

高德地圖vue實現自定義標點熱力圖效果(縮放時展示不同數據)

高德地圖插件引入省略。。。樣式和vue基礎組件省略。。。 如果每個標點沒有數值&#xff0c;則可以用點聚合來實現功能下面例子&#xff0c;每個標點會有按市統計的數值&#xff0c;而且縮放一定程度時&#xff0c;需要展示按省統計的標點&#xff0c;因此需要自定義標點樣式和…

leetcode刷題日志-54螺旋矩陣

思路&#xff1a; 上下左右設置四個邊界 每走完一行或者一列&#xff0c;移動相應邊界&#xff0c;當左邊界大于右邊界&#xff0c;或者上邊界大于下邊界時&#xff0c;結束 代碼如下&#xff1a; class Solution {public List<Integer> spiralOrder(int[][] matrix) {…

線程上下文切換

線程上下文切換 巧妙地利用了時間片輪轉的方式, CPU 給每個任務都服務一定的時間&#xff0c;然后把當前任務的狀態保存下來&#xff0c;在加載下一任務的狀態后&#xff0c;繼續服務下一任務&#xff0c;任務的狀態保存及再加載, 這段過程就叫做上下文切換。時間片輪轉的方式…

Determining Which Version of GDS is Installed

Determining Which Version of GDS is Installed To determine which version of GDS you have, run the following command: $ gdscheck.py -v Example output: GDS release version: 1.0.0.78 nvidia_fs version: 2.7 libcufile version: 2.4

冒泡排序和直接選擇排序(C/C++實現)

文章目錄 冒泡排序(交換排序&#xff09;基本思想特性總結代碼實現 直接選擇排序基本思想特性總結代碼實現&#xff08;優化&#xff0c;每次循環同時選擇最小和最大的數&#xff09; 冒泡排序(交換排序&#xff09; 基本思想 基本思想&#xff1a;所謂交換&#xff0c;就是根…

class065 A星、Floyd、Bellman-Ford與SPFA【算法】

class065 A星、Floyd、Bellman-Ford與SPFA【算法】 2023-12-9 19:27:02 算法講解065【必備】A星、Floyd、Bellman-Ford與SPFA code1 A*算法模版 // A*算法模版&#xff08;對數器驗證&#xff09; package class065;import java.util.PriorityQueue;// A*算法模版&#xff…

vue3+TypeScript全局事件總線mitt

在vue3中 $ on&#xff0c;$off 和 $once 實例方法已被移除&#xff0c;組件實例不再實現事件觸發接口&#xff0c;因此大家熟悉的EventBus便無法使用了。然而我們習慣了使用EventBus&#xff0c;對于這種情況我們可以使用Mitt庫 npm i mitt -S 首先要在全局掛載 mitt 在app…

兩年外包生涯做完,感覺自己廢了一半。。。。。

先說一下自己的情況&#xff0c;本科生&#xff0c;19年通過校招進入南京某軟件公司&#xff0c;干了接近2年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落!而我已經在一個企業干了2年的功能測試&…

laravel的ORM 對象關系映射

Laravel 中的 ORM&#xff08;Eloquent ORM&#xff09;是 Laravel 框架內置的一種對象關系映射系統&#xff0c;用于在 PHP 應用中與數據庫進行交互。Eloquent 提供了一種優雅而直觀的語法&#xff0c;使得開發者可以使用面向對象的方式進行數據庫查詢和操作。 定義模型&…

結合ColorUI組件開發微信小程序

1.自定義組件生命周期函數&#xff1a; Component({data: {},attached() {console.log("自定義組件生命周期函數 attached--先執行");this.getPos();},ready() {console.log("ready生命周期函數---在attached之后執行")},methods: {getPos() {var that th…