第 87 場周賽:比較含退格的字符串、數組中的最長山脈、一手順子、訪問所有節點的最短路徑

Q1、[簡單] 比較含退格的字符串

1、題目描述

給定 st 兩個字符串,當它們分別被輸入到空白的文本編輯器后,如果兩者相等,返回 true# 代表退格字符。

**注意:**如果對空文本輸入退格字符,文本繼續為空。

示例 1:

輸入:s = "ab#c", t = "ad#c"
輸出:true
解釋:s 和 t 都會變成 "ac"。

示例 2:

輸入:s = "ab##", t = "c#d#"
輸出:true
解釋:s 和 t 都會變成 ""。

示例 3:

輸入:s = "a#c", t = "b"
輸出:false
解釋:s 會變成 "c",但 t 仍然是 "b"。

提示:

  • 1 <= s.length, t.length <= 200
  • st 只含有小寫字母以及字符 '#'

進階:

  • 你可以用 O(n) 的時間復雜度和 O(1) 的空間復雜度解決該問題嗎?
2、解題思路
  1. 問題分析

    • 字符串中的 # 表示退格操作,會刪除前一個字符。
    • 需要模擬文本編輯器的行為,處理退格操作后比較兩個字符串是否相同。
  2. 算法設計

    • 使用棧來模擬文本編輯器的行為:
      • 遍歷字符串,遇到非 # 字符則壓入棧中。
      • 遇到 # 字符則彈出棧頂字符(如果棧不為空)。
    • 最終比較兩個棧中的字符是否相同。
  3. 優化

    • 使用雙指針可以在不占用額外空間的情況下解決問題,但棧的解法更直觀。
3、代碼實現
C++
class Solution {
public:bool backspaceCompare(string s, string t) {stack<char> s1, s2;// 處理字符串 sfor (char c : s) {if (c != '#') {s1.push(c);} else if (!s1.empty()) {s1.pop();}}// 處理字符串 tfor (char c : t) {if (c != '#') {s2.push(c);} else if (!s2.empty()) {s2.pop();}}// 比較兩個棧if (s1.size() != s2.size()) {return false;}while (!s1.empty()) {if (s1.top() != s2.top()) {return false;}s1.pop();s2.pop();}return true;}
};
Java
class Solution {public boolean backspaceCompare(String s, String t) {Stack<Character> s1 = new Stack<>();Stack<Character> s2 = new Stack<>();// 處理字符串 sfor (char c : s.toCharArray()) {if (c != '#') {s1.push(c);} else if (!s1.isEmpty()) {s1.pop();}}// 處理字符串 tfor (char c : t.toCharArray()) {if (c != '#') {s2.push(c);} else if (!s2.isEmpty()) {s2.pop();}}// 比較兩個棧if (s1.size() != s2.size()) {return false;}while (!s1.isEmpty()) {if (s1.pop() != s2.pop()) {return false;}}return true;}
}
Python
class Solution:def backspaceCompare(self, s: str, t: str) -> bool:def build(s: str) -> list:stack = []for c in s:if c != '#':stack.append(c)elif stack:stack.pop()return stackreturn build(s) == build(t)

在這里插入圖片描述

4、復雜度分析
  1. 時間復雜度

    • 處理字符串 st 的時間復雜度均為 O(n),其中 n 是字符串的長度。
    • 比較兩個棧的時間復雜度為 O(n)。
    • 總時間復雜度為 O(n)。
  2. 空間復雜度

    • 使用棧的空間復雜度為 O(n)。

Q2、[中等] 數組中的最長山脈

1、題目描述

把符合下列屬性的數組 arr 稱為 山脈數組

  • arr.length >= 3
  • 存在下標 i(0 < i < arr.length - 1),滿足
    • arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
    • arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

給出一個整數數組 arr,返回最長山脈子數組的長度。如果不存在山脈子數組,返回 0

示例 1:

輸入:arr = [2,1,4,7,3,2,5]
輸出:5
解釋:最長的山脈子數組是 [1,4,7,3,2],長度為 5。

示例 2:

輸入:arr = [2,2,2]
輸出:0
解釋:不存在山脈子數組。

提示:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 104

進階:

  • 你可以僅用一趟掃描解決此問題嗎?
  • 你可以用 O(1) 空間解決此問題嗎?
2、解題思路
  1. 問題分析

    • 山脈數組必須有一個山峰,該山峰是數組中的最大值。
    • 山脈數組的左側必須嚴格遞增,右側必須嚴格遞減。
  2. 算法設計

    • 使用動態規劃來記錄每個位置左側嚴格遞增的長度和右側嚴格遞減的長度。
    • 對于每個位置 i,如果 left[i]right[i] 都大于 0,則說明 i 是山峰,山脈長度為 left[i] + right[i] + 1
    • 最終返回所有可能的山脈長度中的最大值。
  3. 優化

    • 使用兩個數組 leftright 來分別記錄每個位置左側和右側的嚴格遞增/遞減長度。

    • 遍歷數組兩次來填充 leftright,然后遍歷一次計算最大山脈長度。

3、代碼實現
C++
class Solution {
public:int longestMountain(vector<int>& arr) {int n = arr.size();if (n < 3) {return 0; // 如果數組長度小于 3,直接返回 0}vector<int> left(n, 0); // 記錄每個位置左側嚴格遞增的長度for (int i = 1; i < n; ++i) {if (arr[i - 1] < arr[i]) {left[i] = left[i - 1] + 1;}}vector<int> right(n, 0); // 記錄每個位置右側嚴格遞減的長度for (int i = n - 2; i >= 0; --i) {if (arr[i + 1] < arr[i]) {right[i] = right[i + 1] + 1;}}int ret = 0;for (int i = 0; i < n; ++i) {if (left[i] > 0 && right[i] > 0) {          // 如果 i 是山峰ret = max(ret, left[i] + right[i] + 1); // 計算山脈長度}}return ret;}
};
class Solution {
public:int longestMountain(vector<int>& arr) {int n = arr.size();int ret = 0;int left = 0;while (left + 2 < n) {int right = left + 1;if (arr[left] < arr[left + 1]) {while (right + 1 < n && arr[right] < arr[right + 1]) {++right;}if (right < n - 1 && arr[right] > arr[right + 1]) {while (right < n - 1 && arr[right] > arr[right + 1]) {++right;}ret = max(ret, right - left + 1);} else {++right;}}left = right;}return ret;}
};
Java
class Solution {public int longestMountain(int[] arr) {int n = arr.length;if (n < 3) {return 0; // 如果數組長度小于3,直接返回0}int[] left = new int[n]; // 記錄每個位置左側嚴格遞增的長度for (int i = 1; i < n; ++i) {if (arr[i - 1] < arr[i]) {left[i] = left[i - 1] + 1;}}int[] right = new int[n]; // 記錄每個位置右側嚴格遞減的長度for (int i = n - 2; i >= 0; --i) {if (arr[i + 1] < arr[i]) {right[i] = right[i + 1] + 1;}}int ret = 0;for (int i = 0; i < n; ++i) {if (left[i] > 0 && right[i] > 0) { // 如果i是山峰ret = Math.max(ret, left[i] + right[i] + 1); // 計算山脈長度}}return ret;}
}

在這里插入圖片描述

Python
class Solution:def longestMountain(self, arr: List[int]) -> int:n = len(arr)if n < 3:return 0  # 如果數組長度小于3,直接返回0left = [0] * n  # 記錄每個位置左側嚴格遞增的長度for i in range(1, n):if arr[i - 1] < arr[i]:left[i] = left[i - 1] + 1right = [0] * n  # 記錄每個位置右側嚴格遞減的長度for i in range(n - 2, -1, -1):if arr[i + 1] < arr[i]:right[i] = right[i + 1] + 1ret = 0for i in range(n):if left[i] > 0 and right[i] > 0:  # 如果i是山峰ret = max(ret, left[i] + right[i] + 1)  # 計算山脈長度return ret
4、復雜度分析
  1. 時間復雜度
    • 填充 leftright 數組的時間復雜度為 O(n)。
    • 計算最大山脈長度的時間復雜度為 O(n)。
    • 總時間復雜度為 O(n)。
  2. 空間復雜度
    • 使用兩個數組 leftright,空間復雜度為 O(n)。

Q3、[中等] 一手順子

1、題目描述

Alice 手中有一把牌,她想要重新排列這些牌,分成若干組,使每一組的牌數都是 groupSize ,并且由 groupSize 張連續的牌組成。

給你一個整數數組 hand 其中 hand[i] 是寫在第 i 張牌上的數值。如果她可能重新排列這些牌,返回 true ;否則,返回 false

示例 1:

輸入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3
輸出:true
解釋:Alice 手中的牌可以被重新排列為 [1,2,3],[2,3,4],[6,7,8]。

示例 2:

輸入:hand = [1,2,3,4,5], groupSize = 4
輸出:false
解釋:Alice 手中的牌無法被重新排列成幾個大小為 4 的組。

提示:

  • 1 <= hand.length <= 104
  • 0 <= hand[i] <= 109
  • 1 <= groupSize <= hand.length
2、解題思路
  1. 問題分析

    • 需要將牌分成若干組,每組有 groupSize 張連續的牌。
    • 如果牌的總數不能被 groupSize 整除,直接返回 false
    • 需要統計每張牌的數量,并按順序分組。
  2. 算法設計

    • 先檢查牌的總數是否能被 groupSize 整除。
    • 對牌進行排序,并統計每張牌的數量。
    • 遍歷排序后的牌,嘗試將連續的 groupSize 張牌分成一組,如果無法找到連續的牌則返回 false
  3. 優化

    • 使用哈希表統計每張牌的數量,可以快速查詢和更新。
    • 排序后可以方便地找到連續的牌。
3、代碼實現
C++
class Solution {
public:bool isNStraightHand(vector<int>& hand, int groupSize) {int n = hand.size();// 如果牌的總數不能被 groupSize 整除,直接返回 falseif (n % groupSize != 0) {return false;}sort(hand.begin(), hand.end()); // 排序unordered_map<int, int> cnt;    // 統計每張牌的數量for (auto& num : hand) {cnt[num]++;}for (auto& x : hand) {// 如果當前牌已經被用完,跳過if (cnt[x] == 0) {continue;}// 檢查連續的 groupSize 張牌for (int j = 0; j < groupSize; ++j) {int num = x + j;// 如果缺少某張連續的牌,返回 falseif (cnt[num] == 0) {return false;}cnt[num]--; // 用掉一張牌}}return true; // 所有牌都成功分組}
};
Java
class Solution {public boolean isNStraightHand(int[] hand, int groupSize) {int n = hand.length;// 如果牌的總數不能被 groupSize 整除,直接返回 falseif (n % groupSize != 0) {return false;}Arrays.sort(hand); // 排序Map<Integer, Integer> cnt = new HashMap<>(); // 統計每張牌的數量for (int num : hand) {cnt.put(num, cnt.getOrDefault(num, 0) + 1);}for (int x : hand) {// 如果當前牌已經被用完,跳過if (cnt.get(x) == 0) {continue;}// 檢查連續的 groupSize 張牌for (int j = 0; j < groupSize; ++j) {int num = x + j;// 如果缺少某張連續的牌,返回 falseif (!cnt.containsKey(num) || cnt.get(num) == 0) {return false;}cnt.put(num, cnt.get(num) - 1); // 用掉一張牌}}return true; // 所有牌都成功分組}
}
Python
class Solution:def isNStraightHand(self, hand: List[int], groupSize: int) -> bool:n = len(hand)if n % groupSize != 0:  # 如果牌的總數不能被 groupSize 整除,直接返回 Falsereturn Falsehand.sort()  # 排序cnt = defaultdict(int)for num in hand:  # 統計每張牌的數量cnt[num] += 1for x in hand:if cnt[x] == 0:  # 如果當前牌已經被用完,跳過continuefor j in range(groupSize):  # 檢查連續的 groupSize 張牌num = x + jif cnt[num] == 0:  # 如果缺少某張連續的牌,返回 Falsereturn Falsecnt[num] -= 1  # 用掉一張牌return True  # 所有牌都成功分組

在這里插入圖片描述

4、復雜度分析
  1. 時間復雜度

    • 排序的時間復雜度為 O(nlogn)。
    • 遍歷和分組的時間復雜度為 O(nlogn)。
    • 總時間復雜度為 O(nlogn)。
  2. 空間復雜度

    • 使用哈希表存儲牌的數量,空間復雜度為 O(nlogn)。

Q4、[困難] 訪問所有節點的最短路徑

1、題目描述

存在一個由 n 個節點組成的無向連通圖,圖中的節點按從 0n - 1 編號。

給你一個數組 graph 表示這個圖。其中,graph[i] 是一個列表,由所有與節點 i 直接相連的節點組成。

返回能夠訪問所有節點的最短路徑的長度。你可以在任一節點開始和停止,也可以多次重訪節點,并且可以重用邊。

示例 1:

img

輸入:graph = [[1,2,3],[0],[0],[0]]
輸出:4
解釋:一種可能的路徑為 [1,0,2,0,3]

示例 2:

img

輸入:graph = [[1],[0,2,4],[1,3,4],[2],[1,2]]
輸出:4
解釋:一種可能的路徑為 [0,1,4,2,3]

提示:

  • n == graph.length
  • 1 <= n <= 12
  • 0 <= graph[i].length < n
  • graph[i] 不包含 i
  • 如果 graph[a] 包含 b ,那么 graph[b] 也包含 a
  • 輸入的圖總是連通圖
2、解題思路
  1. 問題分析
    • 這是一個典型的**狀態壓縮廣度優先搜索(BFS)**問題。
    • 需要記錄訪問過的節點集合,通常用**位掩碼(bitmask)**表示,其中第 i 位為 1 表示節點 i 已被訪問。
    • 使用 BFS 來探索所有可能的路徑,確保找到最短路徑。
  2. 算法設計
    • 初始化:從每個節點出發,初始化隊列,記錄當前節點、訪問掩碼和路徑長度。
    • BFS 遍歷:對于隊列中的每個狀態,嘗試訪問相鄰節點,并更新訪問掩碼。
    • 終止條件:當訪問掩碼表示所有節點都被訪問時,返回當前路徑長度。
  3. 優化
    • 使用 seen 數組避免重復訪問相同的節點和掩碼組合。
    • 優先處理路徑長度較短的狀態,確保找到最短路徑
3、代碼實現
C++
class Solution {
public:int shortestPathLength(vector<vector<int>>& graph) {int n = graph.size();queue<tuple<int, int, int>> q; // 隊列存儲 (節點, 掩碼, 路徑長度)vector<vector<bool>> seen(n, vector<bool>(1 << n, false)); // 標記是否訪問過// 初始化隊列,從每個節點出發for (int i = 0; i < n; ++i) {q.emplace(i, 1 << i, 0);seen[i][1 << i] = true;}int ret = 0;while (!q.empty()) {auto [u, mask, dist] = q.front();q.pop();// 如果所有節點都被訪問,返回當前路徑長度if (mask == (1 << n) - 1) {ret = dist;break;}// 遍歷相鄰節點for (int v : graph[u]) {int mask_v = mask | (1 << v); // 更新掩碼if (!seen[v][mask_v]) {q.emplace(v, mask_v, dist + 1);seen[v][mask_v] = true;}}}return ret;}
};
Java
class Solution {public int shortestPathLength(int[][] graph) {int n = graph.length;Queue<int[]> q = new ArrayDeque<>(); // 隊列存儲 [節點, 掩碼, 路徑長度]boolean[][] seen = new boolean[n][1 << n]; // 標記是否訪問過// 初始化隊列,從每個節點出發for (int i = 0; i < n; ++i) {q.offer(new int[] { i, 1 << i, 0 });seen[i][1 << i] = true;}int ret = 0;while (!q.isEmpty()) {int[] state = q.poll();int u = state[0], mask = state[1], dist = state[2];// 如果所有節點都被訪問,返回當前路徑長度if (mask == (1 << n) - 1) {ret = dist;break;}// 遍歷相鄰節點for (int v : graph[u]) {int mask_v = mask | (1 << v); // 更新掩碼if (!seen[v][mask_v]) {q.offer(new int[] { v, mask_v, dist + 1 });seen[v][mask_v] = true;}}}return ret;}
}
Python
class Solution:def shortestPathLength(self, graph: List[List[int]]) -> int:n = len(graph)q = deque()  # 隊列存儲 (節點, 掩碼, 路徑長度)seen = [[False] * (1 << n) for _ in range(n)]  # 標記是否訪問過# 初始化隊列,從每個節點出發for i in range(n):q.append((i, 1 << i, 0))seen[i][1 << i] = Trueret = 0while q:u, mask, dist = q.popleft()# 如果所有節點都被訪問,返回當前路徑長度if mask == (1 << n) - 1:ret = distbreak# 遍歷相鄰節點for v in graph[u]:mask_v = mask | (1 << v)  # 更新掩碼if not seen[v][mask_v]:q.append((v, mask_v, dist + 1))seen[v][mask_v] = Truereturn ret

在這里插入圖片描述

4、復雜度分析
  • 時間復雜度:O(n2 ?2n)。

  • 空間復雜度:O(n?2n)




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

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

相關文章

linux安裝阿里DataX實現數據遷移

目錄 下載datax工具包(如果下載慢&#xff0c;請嘗試其他國內鏡像站或其他網站下載相應資源) 解壓工具包到當前目錄里 接著進入conf配置目錄并創建一個myjob.json&#xff08;臨時測試json&#xff09;&#xff0c;myjob.json內容如下&#xff0c;用于模擬test庫tab1表數據同…

C++ 引用介紹

很好&#xff01;既然你有 C 的基礎&#xff0c;那么理解 C 的「引用&#xff08;reference&#xff09;」會容易很多。我們來一步步講清楚這個概念。 &#x1f31f; 一句話總結&#xff1a; C 引用&#xff08;reference&#xff09;就是已存在變量的“別名”&#xff0c;它不…

學習筆記086——@PostConstruct注解和InitializingBean接口的使用

文章目錄 1、PostConstruct注解1.1 介紹1.2 用法1.3 場景 2、InitializingBean接口2.1 介紹2.2 用法 1、PostConstruct注解 1.1 介紹 PostConstruct 是 Java EE/Jakarta EE 中的一個注解&#xff0c;用于標記一個方法在依賴注入完成后執行初始化操作。它通常與 Spring 框架一…

考研系列—408真題操作系統篇(2015-2019)

目錄 # 2015年 1.死鎖處理 (1)預防死鎖 (2)避免死鎖 (3)死鎖檢測和解除 2.請求分頁系統的頁面置換策略、頁面置換策略 3.頁、頁框、頁表,基本分頁系統 # 2016年 1.異常、中斷 2.頁置換算法 3.進程的互斥操作 4.SPOOLing技術(從軟件方面實現設備共享) 5.一定要牢記…

argocd部署cli工具并添加k8s集群

先決條件: 1.已經有k8s集群,(網上一萬種部署方式,這里我使用的是kubekey部署的),也埋了個坑,后面說明. 2.已經部署好argocd,并驗證web已經可以訪問.參見 k8s部署argocd-CSDN博客 部署客戶端工具, 這里我是從web頁面上直接下載的對應版本的cli工具. 打開已經部署好的argoc…

打卡day52

簡單cnn 借助調參指南進一步提高精度 基礎CNN模型代碼 import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import cifar10 from tensorflow.keras.utils import to_categorical# 加載數據 (train_images, train_labels),…

OpenGL ES繪制3D圖形以及設置視口

文章目錄 關于 glDrawElements基本概念使用場景mode 繪制模式type 索引數據類型indices 索引緩沖區工作原理繪制正方體實例 視口透視投影&#xff08;Perspective Projection&#xff09;正交投影&#xff08;Orthographic Projection&#xff09;正交投影和透視投影對比 關于 …

【SAS求解多元回歸方程】REG多元回歸分析-多元一次回歸

多元一次回歸是一種統計方法&#xff0c;用于分析多個自變量&#xff08;解釋變量&#xff09;與一個因變量&#xff08;響應變量&#xff09;之間的線性關系。 目錄 【示例】 基本語法 SAS代碼 參數估計 方差分析 回歸統計量 y的擬合診斷 y的回歸變量值 【示例】 設Y…

卡通幼兒園教育通用可愛PPT模版分享

幼兒園教育通用PPT模版&#xff0c;教育教學PPT模版&#xff0c;卡通教育PPT模版&#xff0c;可愛卡通教學課件PPT模版&#xff0c;小清新動物卡通通用PPT模版&#xff0c;教學說課通用PPT模版&#xff0c;開學季PPT模版&#xff0c;國學頌歌PPT模版&#xff0c;可愛簡約風PPT模…

力扣HOT100之技巧:75. 顏色分類

這道題實際上就是讓我們不用sort()函數來實現對原數組的排序&#xff0c;這里我直接使用快速排序對原數組進行排序了&#xff0c;也是復習一下基于快慢指針的快速排序寫法。面試手撕快排的思路參考這個視頻。 用時擊敗100%&#xff0c;還行。下面直接貼代碼。 class Solution …

離線部署openstack 2024.1 keystone

控制節點身份服務 離線下載 apt-get install --download-only keystone python3-openstackclient apache2 libapache2-mod-wsgi-py3mkdir /controller/keystone mv /var/cache/apt/archives/*.deb /controller/keystone/ dpkg -i /controller/keystone/*.deb在一個控制節點操…

帆軟 BI 從入門到實戰全攻略(一):安裝激活與添加數據

一、帆軟 BI 產品概述? 在當今大數據時代&#xff0c;數據分析與可視化成為企業洞察業務、驅動決策的關鍵利器。帆軟軟件有限公司作為中國專業的大數據 BI 和分析平臺提供商&#xff0c;自 2006 年成立以來&#xff0c;憑借其在商業智能和數據分析領域的深耕細作&#xff0c;…

網絡協議通俗易懂詳解指南

目錄 1. 什么是網絡協議? 1.1 協議的本質 1.2 為什么需要協議? 1.3 協議分層的概念 2. TCP協議詳解 - 可靠的信使 ?? 2.1 TCP是什么? 2.2 TCP的核心特性 ?? 面向連接 ??? 可靠傳輸 ?? 流量控制 2.3 TCP三次握手 - 建立連接 2.4 TCP四次揮手 - 斷開連接…

量子加速器切入 AI 底層架構!能源焦慮時代,ORCA 正在改寫數據中心的計算邏輯

內容來源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨浪味仙 行業動向&#xff1a;2000字丨5分鐘閱讀 人工智能的飛速發展&#xff0c;令計算需求呈現爆炸式增長&#xff0c;也催生出專為 AI 設計的新型計算基礎設施形態——AI…

< 買了個麻煩 (二) 618 京東云--輕量服務器 > “可以為您申請全額退訂呢。“ 工單記錄:可以“全額退款“

事情進展是這樣的&#xff1a; 海外接聽 一分鐘 1-2 元&#xff0c;具體多少要問聯通。 這幾天接電話&#xff0c;有點兒心煩&#xff0c;看見來自 010-86310548 以為是 ICP 備案&#xff0c;結果接起來全是 VPS &#xff08;輕量應用服務器&#xff09;這個工單&#xff0c;就…

接口限頻算法:漏桶算法、令牌桶算法、滑動窗口算法

文章目錄 限頻三大算法對比與選型建議一、漏桶算法&#xff08;Leaky Bucket Algorithm&#xff09;1.核心原理2.實現3.為什么要限制漏桶容量4.優缺點分析 二、令牌桶算法&#xff08;Token Bucket Algorithm&#xff09;1.核心原理2.實現&#xff08;1&#xff09;單機實現&am…

HTML5 盒子模型

1. 盒子模型的概念 2. 邊框&#xff08;border&#xff09; 邊框顏色&#xff08;border-color&#xff09; 邊框粗細&#xff08;border-width&#xff09; 邊框樣式&#xff08;border-style&#xff09; border簡寫&#xff08;border&#xff1a;&#xff09; 3. 外邊距&am…

【Linux】Linux高級I/O

參考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/128345976 一、五種IO模型 阻塞式I/O非阻塞式I/OI/O復用&#xff08;多路轉接&#xff09;信號驅動式I/O異步I/O I/O我們并不陌生&#xff0c;簡單的說就是輸入輸出&#xff1b;對于一個輸入操作通常包…

關于界面存在AB測試后UI刷新空白的問題

問題描述&#xff1a; 在同一頁面存在AB面&#xff0c;A和B同時都有一個rv&#xff0c;然后A面的rv填充不了數據&#xff0c;B面的可以。 問題解決&#xff1a; header_task布局里的include_new_gift_sign里有一個和外層一樣id的recyclerview include的標簽的作用是。在infl…

Go 協程(Goroutine)入門與基礎使用

一、什么是協程&#xff08;Goroutine&#xff09;&#xff1f; 簡單來說&#xff0c;協程是由 Go 語言運行時管理的輕量級線程。相比系統線程&#xff0c;它的調度開銷極小&#xff0c;內存占用非常少&#xff08;默認只需 2KB 棧空間&#xff09;。 你可以在一個程序中輕松…