代碼隨想錄-Day55

42. 接雨水

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之后能接多少雨水。
在這里插入圖片描述
輸入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
輸出:6
解釋:上面是由數組 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種情況下,可以接 6 個單位的雨水(藍色部分表示雨水)。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

方法一: 暴力解法

class Solution {public int trap(int[] height) {int sum = 0;for (int i = 0; i < height.length; i++) {// 第一個柱子和最后一個柱子不接雨水if (i==0 || i== height.length - 1) continue;int rHeight = height[i]; // 記錄右邊柱子的最高高度int lHeight = height[i]; // 記錄左邊柱子的最高高度for (int r = i+1; r < height.length; r++) {if (height[r] > rHeight) rHeight = height[r];}for (int l = i-1; l >= 0; l--) {if(height[l] > lHeight) lHeight = height[l];}int h = Math.min(lHeight, rHeight) - height[i];if (h > 0) sum += h;}return sum;}
}

這段代碼是用于解決「接雨水」問題的Java實現。給定一個數組 height,其中 height[i] 表示第 i 個位置的柱子的高度,目標是計算在這個直方圖中能接多少雨水。這個問題的關鍵在于找到每個位置左右兩邊最高的柱子,以此來確定能夠接住的雨水量。

代碼解析

  1. 初始化:

    • 創建一個變量 sum,用于累計接住的雨水總量。
  2. 遍歷并計算雨水量:

    • 遍歷數組 height 中的每個元素,除了第一個和最后一個元素(因為它們無法形成封閉的空間來接雨水)。
    • 對于當前遍歷到的元素 height[i]
      • 計算右側最高柱子的高度 rHeight 和左側最高柱子的高度 lHeight
      • 可以接住的雨水量取決于左右兩邊柱子中較低的那個與當前柱子高度的差值,即 Math.min(lHeight, rHeight) - height[i]
      • 如果這個差值大于0,說明可以接住雨水,將其累加到 sum 中。
  3. 返回結果:

    • 返回累計的雨水總量 sum

時間復雜度和空間復雜度

  • 時間復雜度: O(n^2),其中 n 是數組 height 的長度。這是因為在遍歷數組的過程中,對于每個元素,都需要再次遍歷其左側和右側來尋找最高柱子,導致時間復雜度較高。
  • 空間復雜度: O(1),除了輸入數組 height,代碼中沒有使用額外的數據結構,僅使用了幾個變量進行計算。

總結

雖然這段代碼能夠正確解決接雨水問題,但是其時間復雜度較高,為 O(n^2),在處理大數據量時效率低下。為了提高效率,可以采用動態規劃或雙指針技術,將時間復雜度降低到 O(n)。例如,可以預先計算每個位置左邊最大高度和右邊最大高度,或者使用雙指針從兩邊向中間逼近,這樣可以避免對每個元素進行二次遍歷,顯著提升算法性能。在實際應用中,優化算法的時間復雜度是提高程序運行效率的關鍵,特別是在處理大規模數據時尤為重要。

方法二:雙指針

class Solution {public int trap(int[] height) {int length = height.length;if (length <= 2) return 0;int[] maxLeft = new int[length];int[] maxRight = new int[length];// 記錄每個柱子左邊柱子最大高度maxLeft[0] = height[0];for (int i = 1; i< length; i++) maxLeft[i] = Math.max(height[i], maxLeft[i-1]);// 記錄每個柱子右邊柱子最大高度maxRight[length - 1] = height[length - 1];for(int i = length - 2; i >= 0; i--) maxRight[i] = Math.max(height[i], maxRight[i+1]);// 求和int sum = 0;for (int i = 0; i < length; i++) {int count = Math.min(maxLeft[i], maxRight[i]) - height[i];if (count > 0) sum += count;}return sum;}
}

這段代碼是用于解決「接雨水」問題的另一種Java實現,相較于之前的實現,它使用了動態規劃的思想來優化算法的時間復雜度。目標依然是計算在一個直方圖中能接多少雨水,但是這次通過預計算每個位置左右兩邊的最高柱子高度,避免了對每個位置的二次遍歷,從而提高了算法效率。

代碼解析

  1. 初始化:

    • 創建兩個數組 maxLeftmaxRight,分別用于存儲每個位置左側最大高度和右側最大高度。
    • 創建變量 sum,用于累計接住的雨水總量。
  2. 計算左側最大高度:

    • 初始化 maxLeft[0]height[0],即數組的第一個元素。
    • 從左到右遍歷數組,更新 maxLeft 數組中每個位置左側的最大高度。
  3. 計算右側最大高度:

    • 初始化 maxRight[length - 1]height[length - 1],即數組的最后一個元素。
    • 從右到左遍歷數組,更新 maxRight 數組中每個位置右側的最大高度。
  4. 計算雨水量:

    • 遍歷數組,對于每個位置 i
      • 計算可以接住的雨水量為左右兩邊柱子中較低的那個與當前柱子高度的差值,即 Math.min(maxLeft[i], maxRight[i]) - height[i]
      • 如果這個差值大于0,說明可以接住雨水,將其累加到 sum 中。
  5. 返回結果:

    • 返回累計的雨水總量 sum

時間復雜度和空間復雜度

  • 時間復雜度: O(n),其中 n 是數組 height 的長度。這是因為算法分別進行了三次遍歷:一次計算左側最大高度,一次計算右側最大高度,一次計算雨水量,每次遍歷的時間復雜度均為 O(n)。
  • 空間復雜度: O(n),需要兩個大小為 n 的數組 maxLeftmaxRight 來存儲中間結果。

總結

這段代碼通過預計算每個位置左右兩邊的最高柱子高度,避免了對每個位置進行二次遍歷,從而將時間復雜度從 O(n^2) 優化到了 O(n),顯著提升了算法效率。這種方法在處理大數據量時尤其重要,能夠確保算法在合理時間內完成計算。在實際應用中,動態規劃是一種常用的優化算法時間復雜度的技術,通過將問題分解成更小的子問題并緩存子問題的結果,可以避免重復計算,提高算法效率。

方法三:雙指針優化

class Solution {public int trap(int[] height) {if (height.length <= 2) {return 0;}// 從兩邊向中間尋找最值int maxLeft = height[0], maxRight = height[height.length - 1];int l = 1, r = height.length - 2;int res = 0;while (l <= r) {// 不確定上一輪是左邊移動還是右邊移動,所以兩邊都需更新最值maxLeft = Math.max(maxLeft, height[l]);maxRight = Math.max(maxRight, height[r]);// 最值較小的一邊所能裝的水量已定,所以移動較小的一邊。if (maxLeft < maxRight) {res += maxLeft - height[l ++];} else {res += maxRight - height[r --];}}return res;}
}

這段代碼是用于解決「接雨水」問題的又一種Java實現,它采用了雙指針技術,從數組的兩端向中間逼近,逐步計算能接住的雨水量。這種方法避免了預處理數組或多次遍歷,使得算法的時間復雜度和空間復雜度均得到優化。

代碼解析

  1. 初始化:

    • 檢查數組長度,如果長度小于等于2,直接返回0,因為至少需要三個柱子才能形成封閉空間來接雨水。
    • 初始化兩個指針 lr,分別指向數組的第二個元素和倒數第二個元素。
    • 初始化兩個變量 maxLeftmaxRight,分別記錄左側和右側當前遇到的最大高度。
  2. 雙指針逼近:

    • 使用循環,直到 lr 相遇或交錯。
    • 在每次循環中,更新 maxLeftmaxRight 的值,確保它們始終存儲從開始位置到當前指針位置的最大高度。
    • 比較 maxLeftmaxRight 的值:
      • 如果 maxLeft 小于 maxRight,意味著左側的高度不足以阻擋雨水,因此左側的雨水量為 maxLeft - height[l],將其累加到結果變量 res 中,并將左側指針 l 向右移動一位。
      • 否則,右側的高度不足以阻擋雨水,右側的雨水量為 maxRight - height[r],將其累加到結果變量 res 中,并將右側指針 r 向左移動一位。
  3. 返回結果:

    • 循環結束后,返回累計的雨水總量 res

時間復雜度和空間復雜度

  • 時間復雜度: O(n),其中 n 是數組 height 的長度。這是因為雙指針技術確保了每個元素僅被訪問一次。
  • 空間復雜度: O(1),除了輸入數組 height,代碼中只使用了幾個變量進行計算,沒有額外的數據結構。

總結

這段代碼通過雙指針技術實現了對「接雨水」問題的有效求解,避免了預處理數組或多次遍歷的高時間復雜度,同時在空間復雜度方面也得到了優化。雙指針技術是一種常見的算法技巧,適用于多種問題,如尋找兩個有序數組的中位數、求解兩數之和等。在實際應用中,掌握雙指針技術能夠幫助我們更高效地解決許多類型的問題,特別是那些涉及到數組或列表的遍歷和比較的問題。

方法四:單調棧

class Solution {public int trap(int[] height){int size = height.length;if (size <= 2) return 0;// in the stack, we push the index of array// using height[] to access the real heightStack<Integer> stack = new Stack<Integer>();stack.push(0);int sum = 0;for (int index = 1; index < size; index++){int stackTop = stack.peek();if (height[index] < height[stackTop]){stack.push(index);}else if (height[index] == height[stackTop]){// 因為相等的相鄰墻,左邊一個是不可能存放雨水的,所以pop左邊的index, push當前的indexstack.pop();stack.push(index);}else{//pop up all lower valueint heightAtIdx = height[index];while (!stack.isEmpty() && (heightAtIdx > height[stackTop])){int mid = stack.pop();if (!stack.isEmpty()){int left = stack.peek();int h = Math.min(height[left], height[index]) - height[mid];int w = index - left - 1;int hold = h * w;if (hold > 0) sum += hold;stackTop = stack.peek();}}stack.push(index);}}return sum;}
}

這段代碼是用于解決「接雨水」問題的另一種Java實現,它采用了單調棧的策略。單調棧是一種數據結構,可以用來快速找到數組中某個元素左側或右側的下一個更大或更小的元素,非常適合解決接雨水問題,因為要確定每個位置可以接住的雨水量,關鍵在于找到其左右兩側的最高柱子。

代碼解析

  1. 初始化:

    • 檢查數組長度,如果長度小于等于2,直接返回0。
    • 創建一個單調棧 stack,用于存儲數組元素的下標。
    • 初始化一個變量 sum,用于累計接住的雨水總量。
  2. 遍歷并維護單調棧:

    • 遍歷數組 height 中的每個元素。
    • 對于當前遍歷到的元素 height[index]
      • 如果當前元素小于棧頂元素對應的值,將當前下標 index 入棧。
      • 如果當前元素等于棧頂元素對應的值,將棧頂元素彈出,因為相等的相鄰墻,左邊一個是不可能存放雨水的,然后將當前下標 index 入棧。
      • 如果當前元素大于棧頂元素對應的值,進入一個循環:
        • 彈出棧頂元素,直到棧為空或者棧頂元素對應的值不小于當前元素。
        • 對于每次彈出的元素,如果棧不為空,計算可以接住的雨水量,即左右兩邊柱子中較低的那個與彈出元素高度的差值乘以寬度(當前下標與棧頂下標的距離減1),將其累加到結果變量 sum 中。
  3. 返回結果:

    • 返回累計的雨水總量 sum

時間復雜度和空間復雜度

  • 時間復雜度: O(n),其中 n 是數組 height 的長度。每個元素至多被放入和彈出棧一次。
  • 空間復雜度: O(n),需要一個大小為 n 的單調棧 stack

總結

這段代碼通過使用單調棧,有效地解決了接雨水問題,避免了多次遍歷數組,提高了算法效率。單調棧在處理這類問題時表現出色,能夠快速找到特定條件下下一個更大或更小的元素,是解決與單調性相關的數組或序列問題的常用工具。在實際應用中,掌握單調棧的使用方法能夠幫助解決一系列經典問題,提高代碼效率和性能。

84. 柱狀圖中最大的矩形

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。在這里插入圖片描述
輸入:heights = [2,1,5,6,2,3]
輸出:10
解釋:最大的矩形為圖中紅色區域,面積為 10
在這里插入圖片描述
輸入: heights = [2,4]
輸出: 4
在這里插入圖片描述

方法一:暴力解法

class Solution {public int largestRectangleArea(int[] heights) {int length = heights.length;int[] minLeftIndex = new int [length];int[] minRightIndex = new int [length];// 記錄左邊第一個小于該柱子的下標minLeftIndex[0] = -1 ;for (int i = 1; i < length; i++) {int t = i - 1;// 這里不是用if,而是不斷向右尋找的過程while (t >= 0 && heights[t] >= heights[i]) t = minLeftIndex[t];minLeftIndex[i] = t;}// 記錄每個柱子右邊第一個小于該柱子的下標minRightIndex[length - 1] = length;for (int i = length - 2; i >= 0; i--) {int t = i + 1;while(t < length && heights[t] >= heights[i]) t = minRightIndex[t];minRightIndex[i] = t;}// 求和int result = 0;for (int i = 0; i < length; i++) {int sum = heights[i] * (minRightIndex[i] - minLeftIndex[i] - 1);result = Math.max(sum, result);}return result;}
}

這段代碼是用于解決「最大矩形」問題的Java實現,其目標是在由非負整數構成的直方圖中尋找最大矩形面積。給定一個數組 heights,其中 heights[i] 表示第 i 個位置的柱子的高度,問題是要找出直方圖中最大的矩形面積。

代碼解析

  1. 初始化:

    • 創建兩個數組 minLeftIndexminRightIndex,分別用于存儲每個柱子左側第一個小于它的柱子的下標和右側第一個小于它的柱子的下標。
    • 創建變量 result,用于存儲最大的矩形面積。
  2. 計算左側最小下標:

    • 初始化 minLeftIndex[0]-1,即數組的最左側。
    • 從左到右遍歷數組,對于每個位置 i,使用一個變量 t 來追蹤左側第一個小于 heights[i] 的柱子的下標。如果當前位置的柱子高度小于等于左側柱子的高度,就繼續向左尋找,直到找到一個小于它的柱子為止,或者到達數組邊界。
  3. 計算右側最小下標:

    • 初始化 minRightIndex[length - 1]length,即數組的最右側。
    • 從右到左遍歷數組,對于每個位置 i,使用一個變量 t 來追蹤右側第一個小于 heights[i] 的柱子的下標。如果當前位置的柱子高度小于等于右側柱子的高度,就繼續向右尋找,直到找到一個小于它的柱子為止,或者到達數組邊界。
  4. 計算最大矩形面積:

    • 遍歷數組,對于每個位置 i,計算以該柱子為底邊的矩形面積,即 heights[i] 乘以寬度,寬度為 minRightIndex[i] - minLeftIndex[i] - 1
    • 更新 result,使其始終保持最大面積的值。
  5. 返回結果:

    • 返回最終計算出的最大矩形面積 result

時間復雜度和空間復雜度

  • 時間復雜度: O(n),其中 n 是數組 heights 的長度。算法分別進行了三次遍歷:一次計算左側最小下標,一次計算右側最小下標,一次計算最大矩形面積,每次遍歷的時間復雜度均為 O(n)。
  • 空間復雜度: O(n),需要兩個大小為 n 的數組 minLeftIndexminRightIndex 來存儲中間結果。

總結

這段代碼通過預計算每個柱子左右兩側第一個小于它的柱子的下標,避免了對每個位置進行多次遍歷來尋找最優解,從而將時間復雜度從 O(n^2) 優化到了 O(n),顯著提升了算法效率。這種方法在處理大數據量時尤其重要,能夠確保算法在合理時間內完成計算。在實際應用中,這種通過預處理數據來加速計算的策略是解決復雜問題的常見手段,通過將問題分解成更小的子問題并提前計算關鍵信息,可以避免重復計算,提高算法效率。

方法二:單調棧

class Solution {int largestRectangleArea(int[] heights) {Stack<Integer> st = new Stack<Integer>();// 數組擴容,在頭和尾各加入一個元素int [] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for (int index = 0; index < heights.length; index++){newHeights[index + 1] = heights[index];}heights = newHeights;st.push(0);int result = 0;// 第一個元素已經入棧,從下標1開始for (int i = 1; i < heights.length; i++) {// 注意heights[i] 是和heights[st.top()] 比較 ,st.top()是下標if (heights[i] > heights[st.peek()]) {st.push(i);} else if (heights[i] == heights[st.peek()]) {st.pop(); // 這個可以加,可以不加,效果一樣,思路不同st.push(i);} else {while (heights[i] < heights[st.peek()]) { // 注意是whileint mid = st.peek();st.pop();int left = st.peek();int right = i;int w = right - left - 1;int h = heights[mid];result = Math.max(result, w * h);}st.push(i);}}return result;}
}

這段代碼是用于解決「最大矩形」問題的另一種Java實現,它采用了單調棧的策略。問題的核心是在由非負整數構成的直方圖中尋找最大矩形面積。給定一個數組 heights,其中 heights[i] 表示第 i 個位置的柱子的高度,目標是找到直方圖中最大的矩形面積。

代碼解析

  1. 初始化與數組擴容:

    • 創建一個單調棧 st,用于存儲數組元素的下標。
    • 為了便于處理邊界條件,首先對數組 heights 進行擴容,即在頭部和尾部各添加一個高度為0的虛擬柱子,這樣可以簡化后續的邏輯處理。
  2. 遍歷并維護單調棧:

    • 初始化棧,將第一個元素的下標 0 入棧。
    • 從下標 1 開始遍歷數組 heights
    • 對于當前遍歷到的元素 heights[i]
      • 如果當前元素高度大于棧頂元素對應的值,將當前下標 i 入棧。
      • 如果當前元素高度等于棧頂元素對應的值,可以將棧頂元素彈出,再將當前下標 i 入棧(注:這里彈出棧頂元素并非必要步驟,但不影響最終結果,僅影響棧內元素的分布)。
      • 如果當前元素高度小于棧頂元素對應的值,進入一個循環:
        • 不斷彈出棧頂元素,直到棧為空或者棧頂元素對應的值不大于當前元素高度。
        • 對于每次彈出的元素,計算可以形成的矩形面積,即高度乘以寬度(當前下標 i 減去棧頂下標再減1),更新最大面積 result 的值。
        • 循環結束后,將當前下標 i 入棧。
  3. 返回結果:

    • 返回計算出的最大矩形面積 result

時間復雜度和空間復雜度

  • 時間復雜度: O(n),其中 n 是數組 heights 的長度。每個元素至多被放入和彈出棧一次。
  • 空間復雜度: O(n),需要一個大小為 n 的單調棧 st

總結

這段代碼通過使用單調棧,有效地解決了最大矩形問題,避免了多次遍歷數組來尋找最優解,提高了算法效率。單調棧在處理這類問題時表現出色,能夠快速找到特定條件下下一個更大或更小的元素,是解決與單調性相關的數組或序列問題的常用工具。在實際應用中,掌握單調棧的使用方法能夠幫助解決一系列經典問題,提高代碼效率和性能。通過適當的數據結構和算法設計,如這里的單調棧,可以顯著減少時間復雜度,使算法在處理大規模數據時也能保持高效。

方法三:單調棧精簡

class Solution {public int largestRectangleArea(int[] heights) {int[] newHeight = new int[heights.length + 2];System.arraycopy(heights, 0, newHeight, 1, heights.length);newHeight[heights.length+1] = 0;newHeight[0] = 0;Stack<Integer> stack = new Stack<>();stack.push(0);int res = 0;for (int i = 1; i < newHeight.length; i++) {while (newHeight[i] < newHeight[stack.peek()]) {int mid = stack.pop();int w = i - stack.peek() - 1;int h = newHeight[mid];res = Math.max(res, w * h);}stack.push(i);}return res;}
}

這段代碼是用于解決「最大矩形」問題的Java實現,其目標是在由非負整數構成的直方圖中找到具有最大面積的矩形。給定一個數組 heights,其中 heights[i] 表示直方圖中第 i 個柱子的高度,算法的任務是確定這個直方圖中可以形成的具有最大面積的矩形。

代碼解析

  1. 初始化與數組擴容:

    • 創建一個新數組 newHeight,長度為原數組 heights 長度加上2,這樣做是為了簡化邊界條件的處理。
    • 將原數組 heights 的內容復制到 newHeight 的中間部分,同時在 newHeight 的頭部和尾部各添加一個高度為0的元素。這樣可以確保算法在處理邊界柱子時不會出現下標越界的情況。
  2. 創建單調棧:

    • 創建一個單調棧 stack,用于存儲柱子的下標,初始時將 newHeight 的第一個元素下標 0 入棧。
  3. 遍歷并維護單調棧:

    • 從下標 1 開始遍歷 newHeight
    • 對于當前遍歷到的元素 newHeight[i]
      • 如果當前元素的高度小于棧頂元素對應的高度,即 newHeight[i] < newHeight[stack.peek()],則:
        • 進入一個循環,持續彈出棧頂元素直到棧為空或當前元素高度大于等于棧頂元素高度。
        • 對于每次彈出的元素,計算可以形成的矩形面積,即高度乘以寬度(當前下標 i 減去棧頂下標再減1),并更新最大面積 res 的值。
      • 無論當前元素高度與棧頂元素高度的比較結果如何,都將當前下標 i 入棧。
  4. 返回結果:

    • 算法完成后,返回計算出的最大矩形面積 res

時間復雜度和空間復雜度

  • 時間復雜度: O(n),其中 n 是數組 heights 的長度。每個元素至多被放入和彈出棧一次。
  • 空間復雜度: O(n),需要一個大小為 n 的單調棧 stack 和一個長度為 heights.length + 2 的數組 newHeight

總結

這段代碼通過使用單調棧策略,有效地解決了最大矩形問題,避免了多次遍歷數組來尋找最優解,提高了算法效率。單調棧在這里用于快速找到每個柱子左側和右側第一個低于它的柱子,進而計算出以該柱子為高度的最大矩形面積。在實際應用中,單調棧是一種非常實用的數據結構,尤其適合處理與單調性有關的問題,如尋找下一個更大或更小的元素、計算直方圖最大矩形面積等。通過巧妙地利用單調棧,可以顯著降低算法的時間復雜度,使程序在處理大規模數據時仍能保持高效。

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

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

相關文章

CentOS7二進制安裝和YUM安裝mongodb,服務器無法安裝5.0以上的 mongodb 數據庫報錯 Illegal instruction

文章目錄 MongoDB 安裝二進制安裝YUM 安裝 Tips:1、MongoDB安裝問題2、MongoDB登錄3、MongoDB排序時內存大小限制和創建索引4、創建用戶5、Java yaml使用密碼連接mongodb6、MongoDB增刪改查 MongoDB 安裝 二進制安裝 [rootmysql5-7 mongodb-6.0.4]# cat start.sh #!/bin/bash…

js使用proxy代理監聽控制事件

本文為proxy代理的實例應用&#xff0c;有關代理的內容可以參考&#xff1a; js語法---理解反射Reflect對象和代理Proxy對象 監聽事件 要監聽dom元素的事件&#xff0c;我們會采用回調觸發的方式來執行操作&#xff0c; 而觸發事件的過程很明顯是一個異步操作&#xff0c;異…

Docker 使用基礎(1)—鏡像倉庫

&#x1f3ac;慕斯主頁&#xff1a;修仙—別有洞天 ??今日夜電波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━?&#x1f49f;──────── 4:20 &#x1f504; ?? ? …

Pinia在vue項目中的使用

Pinia是Vue 3官方推薦的狀態管理模式&#xff0c;由尤雨溪創建并集成到了 Vue.js 中&#xff0c;它是一個輕量級、純粹基于函數的思想實現的應用狀態管理庫。Pinia的設計理念類似于Redux&#xff0c;但它更簡單易用&#xff0c;更適合于小型到中型的單文件組件應用。 在Vue 3項…

android13 固定U盤鏈接 SD卡鏈接 TF卡鏈接 硬盤鏈接

1.前言 有些客戶使用的應用并不帶有自動監聽U盤 sd卡廣播的代碼,使用的代碼是固定的地址,這樣的話,就需要我們將系統的掛載目錄固定了。 原始路徑 /storage/3123-19FA 增加鏈接 /storage/upan_000 -> /storage/3123-19FA 2. 首先如果是應用本身監聽的話,使用的是 /…

【Linux線程篇】探索Linux多線程:并行編程的入門指南

W...Y的主頁 &#x1f60a; 代碼倉庫分享&#x1f495; Linux線程概念 什么是線程 在一個程序里的一個執行路線就叫做線程&#xff08;thread&#xff09;。更準確的定義是&#xff1a;線程是“一個進程內部的控制序列”一切進程至少都有一個執行線程線程在進程內部運行&am…

【國產開源可視化引擎Meta2d.js】數據

數據 Meta2d.js是由數據驅動顯示的。圖紙和圖元支持任意數據。 內置屬性 基于“約定優于配置”原則&#xff0c;Meta2d.js引擎會有一些內置屬性名&#xff0c;例如id表示唯一標識、name表示圖元名稱、text表示文本、color表示顏色等。 內置屬性有固定含義&#xff0c;影響顯…

揭秘:離心風機風量背后的科學原理

在工業生產和建筑環境中&#xff0c;離心風機如同一位不倦的呼吸管家&#xff0c;默默地維持著空氣流動與品質。 你是否好奇過&#xff0c;究竟是什么因素在背后操縱著這位“呼吸管家”的風量表現呢&#xff1f;今天&#xff0c;就讓我們一探究竟。 舉個例子&#xff1a;你在吹…

『大模型筆記』GraphRAG:利用復雜信息進行發現的新方法!

GraphRAG:利用復雜信息進行發現的新方法! 文章目錄 一. GraphRAG:利用復雜信息進行發現的新方法!1. 將RAG應用于私人數據集2. 整個數據集的推理3. 創建LLM生成的知識圖譜4. 結果指標5. 下一步二. 參考文獻微軟官方推文:https://www.microsoft.com/en-us/research/blog/gra…

LeetCode題練習與總結:反轉字符串中的單詞--151

一、題目描述 給你一個字符串 s &#xff0c;請你反轉字符串中 單詞 的順序。 單詞 是由非空格字符組成的字符串。s 中使用至少一個空格將字符串中的 單詞 分隔開。 返回 單詞 順序顛倒且 單詞 之間用單個空格連接的結果字符串。 注意&#xff1a;輸入字符串 s中可能會存在…

速盾:好的cdn服務器

CDN&#xff08;Content Delivery Network&#xff09;是指內容分發網絡&#xff0c;是一種將網站的靜態內容&#xff08;如圖片、音頻、視頻&#xff09;緩存在分布式的服務器節點上&#xff0c;通過就近訪問用戶的請求&#xff0c;提供快速可靠的內容傳輸服務的技術。 好的C…

HTML5文本標簽、圖像標簽、超鏈接

一、文本樣式標簽 字體樣式標簽&#xff1a; 加粗&#xff1a;<strong>…</strong> 斜體&#xff1a; < em >…</ em> eg&#xff1a; <h3>徐志摩人物簡介</h3> <p> <strong>1910</strong>年入杭州學堂<br/> &l…

微信小程序 - 本地存儲 增加有效期

小程序的本地存儲API提供了wx.setStorageSync和wx.setStorage來存儲數據&#xff0c;注意的是&#xff0c;小程序的本地存儲并沒有明確的有效期設置&#xff0c;存儲的數據在不超過限制的情況下&#xff0c;會一直保留。 一、小程序本地存儲API 小程序的本地存儲API提供了設置…

WEB06JavaScriptAjax

基礎語法 引入方式 引入方式 內部腳本&#xff1a;將JS代碼定義在HTML頁面中 JavaScript代碼必須位于<script></script>標簽之間 在HTML文檔中&#xff0c;可以在任意地方&#xff0c;放置任意數量的<script> 一般會把腳本置于<body>元素的底部&a…

常見的氣體流量計有哪些?

1.氣體渦輪流量計 適用場合&#xff1a;流量變化小&#xff0c;脈動流頻率小&#xff0c;中低壓潔凈天然氣優點 1.精度高&#xff0c;重復性好 2.測量范圍廣&#xff0c;壓損小&#xff0c;安裝維修方便 3.具有較高的抗電磁干擾和抗震動能力缺點&#xff1a;分辨率低&#xff…

活動:不要卷模型,要卷應用

如何理解李彥宏說的“不要卷模型&#xff0c;要卷應用” 1. 現狀 現如今&#xff0c;是否具備獨立的 AI 技術似乎已經成為衡量一個互聯網企業是否成功的標志。各家都在竭盡全力卷模型、卷數據、卷訓練效果&#xff0c;市面上僅是語言類 AI 就多達十幾種&#xff0c;但從一名消…

瀏覽器中js外掛腳本的執行方式

1、開發工具控制臺交互執行 網頁中按F12打開開發者工具&#xff0c;選擇“控制臺”&#xff0c;鍵入js腳本命令回車執行&#xff0c;適用于臨時使用腳本邏輯簡單的場景&#xff0c;實例如下&#xff1a; // 獲取網頁元素的文本腳本 var elem document.getElementById("…

2-添加庫

本節將學習如何在項目中創建和使用庫&#xff0c;還將看到如何使庫的使用成為可選的。 本節中使用的示例代碼下載見step1-簡單開始cmake實踐-CSDN博客。 練習1 -創建一個庫 要在CMake中添加一個庫&#xff0c;使用add_library()命令并指定哪些源文件應該組成該庫。 我們可…

接入應用內支付服務,提高商業變現效率

在當今競爭激烈的移動應用市場中&#xff0c;開發者們面臨著提升應用商業變現能力的挑戰。用戶體驗的流暢性和支付的安全性至關重要。 HarmonyOS SDK應用內支付服務&#xff08;IAP Kit&#xff09;為開發者提供了一站式的解決方案&#xff0c;簡化了應用內支付的接入流程&…

C嘎嘎:類和對象(一)

目錄 面向過程和面向對象的初步認識 類的引入 類的定義 類的訪問限定符及封裝 訪問限定符 封裝 類的作用域 類的實例化 類對象模型 如何計算類對象大小 結構體內存對齊規則 this指針 this指針的引出 this指針的特性 類的6個默認成員函數 構造函數 概念 特性 …