代碼隨想錄 數組部分+代碼可在本地編譯器運行

代碼隨想錄 數組部分,代碼可在本地編譯器運行

文章目錄

  • 數組理論基礎
  • 704.二分查找
    • 題目:
    • 思路
      • 二分法第一種寫法
      • 二分法第二種寫法
    • 代碼
  • 27.移除元素
    • 題目:
    • 思路-雙指針法
    • 代碼
  • 977.有序數組的平方
    • 題目
    • 思路-雙指針
    • 代碼
  • 209.長度最小的子數組
    • 題目:
    • 思路 -- 滑動窗口
    • 代碼:
  • 59.螺旋矩陣Ⅱ
    • 題目
    • 思路
    • 代碼

數組理論基礎

數組是存放在連續內存空間上的相同類型數據的集合。
數組可以方便的通過下標索引的方式獲取到下標下對應的數據。
需要兩點注意的是

  • 數組下標都是從0開始的。
  • 數組內存空間的地址是連續的

正是因為數組的在內存空間的地址是連續的,所以我們在刪除或者增添元素的時候,就難免要移動其他元素的地址

例如刪除下標為3的元素,需要對下標為3的元素后面的所有元素都要做移動操作,如圖所示:

數組的元素是不能刪的,只能覆蓋。
那么二維數組直接上圖,大家應該就知道怎么回事了

那么二維數組在內存的空間地址是連續的么?
C++中二維數組在地址空間上是連續的。

704.二分查找

題目:

. - 力扣(LeetCode)
給定一個 n 個元素**有序的(升序)**整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中并且下標為 4

示例 2:

輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1

思路

使用二分法的前提條件:數組為有序數組,同時強調數組中無重復元素。因為一旦有重復元素,使用二分查找法返回的元素下標可能不是唯一的。
寫二分法,區間的定義一般為兩種,左閉右閉即[left, right],或者左閉右開即[left, right)。

二分法第一種寫法

第一種寫法,我們定義 target 是在一個在左閉右閉的區間里, 也就是[left, right] (這個很重要非常重要)。
區間的定義這就決定了二分法的代碼應該如何寫,因為定義target在[left, right]區間,所以有如下兩點:

  • while (left <= right) 要使用 <= ,因為left == right是有意義的,所以使用 <=
  • if (nums[middle] > target) right 要賦值為 middle - 1,因為當前這個nums[middle]一定不是target,那么接下來要查找的左區間結束下標位置就是 middle - 1

例如在數組:1,2,3,4,7,9,10中查找元素2,如圖所示:

二分法第二種寫法

如果說定義 target 是在一個在左閉右開的區間里,也就是[left, right) ,那么二分法的邊界處理方式則截然不同。
有如下兩點:

  • while (left < right),這里使用 < ,因為left == right在區間[left, right)是沒有意義的
  • if (nums[middle] > target) right 更新為 middle,因為當前nums[middle]不等于target,去左區間繼續尋找,而尋找區間是左閉右開區間,所以right更新為middle,即:下一個查詢區間不會去比較nums[middle]

在數組:1,2,3,4,7,9,10中查找元素2,如圖所示:(注意和方法一的區別)

代碼

  • 第一種寫法:
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;class Solution {
public:int search(vector<int>& nums, int target){int left = 0;int right = nums.size() - 1;// 定義target在左閉右閉的區間里,[left, right]while (left <= right)// 當left==right,區間[left, right]依然有效,所以用 <={int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2if (nums[middle] > target)// target 在左區間,所以[left, middle - 1]right = middle - 1;else if (nums[middle] < target)// target 在右區間,所以[middle + 1, right]left = middle + 1;elsereturn middle;// 數組中找到目標值,直接返回下標}// 未找到return -1;}
};int main(){vector<int> nums = { -1, 0, 3, 5, 9, 12 }; // 創建一個數組int target = 9;Solution obj;// 創建一個Solution類型的對象obj,int result;//通過obj對象調用search函數,并傳入參數nums、targetresult = obj.search(nums, target);// 輸出結果if (result == -1)cout << "沒有查找到target, 輸出為: " << result << endl;elsecout << "查找到target,輸出為: " << result << endl;return 0;
}
  • 時間復雜度:O(log n)

  • 空間復雜度:O(1)

  • 第二種寫法:

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size(); // 定義target在左閉右開的區間里,即:[left, right)while (left < right) { // 因為left == right的時候,在[left, right)是無效的空間,所以使用 <int middle = left + ((right - left) >> 1);if (nums[middle] > target) {right = middle; // target 在左區間,在[left, middle)中} else if (nums[middle] < target) {left = middle + 1; // target 在右區間,在[middle + 1, right)中} else { // nums[middle] == targetreturn middle; // 數組中找到目標值,直接返回下標}}// 未找到目標值return -1;}
};
  • 時間復雜度:O(log n)
  • 空間復雜度:O(1)

27.移除元素

題目:

. - 力扣(LeetCode)
給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素,并返回移除后數組的新長度。
不要使用額外的數組空間,你必須僅使用 O(1) 額外空間原地修改輸入數組
元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。
示例 1:

輸入: nums = [3,2,2,3], val = 3,
輸出:2, nums = [2,2]
解釋:函數應該返回新的長度 2, 并且nums 中的前兩個元素均為 2。 你不需要考慮數組中超出新長度后面的元素。

示例 2:

輸入: nums = [0,1,2,2,3,0,4,2], val = 2
輸出:5, nums = [0,1,3,0,4]
函數應該返回新的長度 5, 并且 nums 中的前五個元素為 0, 1, 3, 0, 4。

你不需要考慮數組中超出新長度后面的元素。

思路-雙指針法

雙指針法(快慢指針法):** 通過一個快指針和慢指針在一個for循環下完成兩個for循環的工作。**
定義快慢指針

  • 快指針:尋找新數組的元素 ,新數組就是不含有目標元素的數組
  • 慢指針:指向更新 新數組下標的位置

刪除過程如下:

代碼

#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;class Solution {
public:int removeElement(vector<int>& nums, int val) {int slowIndex = 0; // 慢指針for (int fastIndex = 0;fastIndex < nums.size();fastIndex++) {// 不相等時,將原數組(fastIndex數組)中的元素放入新數組(slowIndex代表的數組)中,// 同時slowIndex移到下一個位置if (val != nums[fastIndex]) { nums[slowIndex++] = nums[fastIndex];}}return slowIndex; }
};int main() {vector<int> nums = {0,1,2,3,3,0,4,2}; // 創建一個數組int val = 2;Solution obj;// 創建一個Solution類型的對象obj,int result; //通過obj對象調用removeElement函數,并傳入參數nums、valresult = obj.removeElement(nums,val);// 輸出結果cout << "刪除元素后的數組新長度為: " << result << endl;cout << "刪除元素后的數組為:";for (int i = 0; i < result; i++) {cout << nums[i] << " ";}cout << endl;return 0;
}

image.png
時間復雜度:O(n)
空間復雜度:O(1)

977.有序數組的平方

題目

. - 力扣(LeetCode)
給你一個按 非遞減順序 排序的整數數組 nums,返回 每個數字的平方 組成的新數組,要求也按 非遞減順序 排序。
示例 1:

輸入:nums = [-4,-1,0,3,10]
輸出:[0,1,9,16,100]
解釋:平方后,數組變為 [16,1,0,9,100],排序后,數組變為 [0,1,9,16,100]

示例 2:

輸入:nums = [-7,-3,2,3,11]
輸出:[4,9,9,49,121]

思路-雙指針

數組其實是有序的, 只不過負數平方之后可能成為最大數了。
那么數組平方的最大值就在數組的兩端,不是最左邊就是最右邊,不可能是中間。
此時可以考慮雙指針法了,i 指向起始位置,j 指向終止位置。
定義一個新數組result,和A數組一樣的大小,讓 k 指向result數組終止位置。
如果A[i] * A[i] < A[j] * A[j] 那么result[k–] = A[j] * A[j]; 。
如果A[i] * A[i] >= A[j] * A[j] 那么result[k–] = A[i] * A[i]; 。
如動畫所示:

代碼

#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int k = nums.size() - 1;vector<int> result(nums.size(), 0);for (int i = 0, j = nums.size() - 1;i <= j;) {if (nums[i] * nums[i] >= nums[j] * nums[j]) {result[k--] = nums[i] * nums[i];i++;}else {result[k--] = nums[j] * nums[j];j--;}}return result;}
};void PrintVector(vector<int>& nums) {for (int i = 0; i < nums.size();i++) {cout << nums[i] << " ";}cout << endl;
}int main() {vector<int> nums = { -4,-1,0,3,10 }; // 創建一個數組Solution obj;// 創建一個Solution類型的對象obj,vector<int> result;//通過obj對象調用sortedSquares函數,并傳入參數numsresult = obj.sortedSquares(nums);// 輸出結果cout << "平方排序后的數組為: " << endl;PrintVector(result);return 0;
}

時間復雜度為O(n);

209.長度最小的子數組

題目:

. - 力扣(LeetCode)
給定一個含有 n 個正整數的數組和一個正整數 target ,找出該數組中滿足其和 ≥target 的長度最小的 連續 子數組,并返回其長度。如果不存在符合條件的子數組,返回 0。
示例:

輸入:target = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子數組 [4,3] 是該條件下的長度最小的子數組。

提示:

  • 1 <= target <= 10^9
  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5

思路 – 滑動窗口

接下來就開始介紹數組操作中另一個重要的方法:滑動窗口
所謂滑動窗口,就是不斷的調節子序列的起始位置和終止位置,從而得出我們要想的結果
在暴力解法中,是一個for循環滑動窗口的起始位置,一個for循環為滑動窗口的終止位置,用兩個for循環 完成了一個不斷搜索區間的過程。
那么滑動窗口如何用一個for循環來完成這個操作呢。
首先要思考 如果用一個for循環,那么應該表示 滑動窗口的起始位置,還是終止位置
如果只用一個for循環來表示 滑動窗口的起始位置,那么如何遍歷剩下的終止位置?
此時難免再次陷入 暴力解法的怪圈。
所以 只用一個for循環,那么這個循環的索引,一定是表示 滑動窗口的終止位置
那么問題來了, 滑動窗口的起始位置如何移動呢?
這里還是以題目中的示例來舉例,s=7, 數組是 2,3,1,2,4,3,來看一下查找的過程:

最后找到 4,3 是最短距離。
其實從動畫中可以發現滑動窗口也可以理解為雙指針法的一種!只不過這種解法更像是一個窗口的移動,所以叫做滑動窗口更適合一些。
在本題中實現滑動窗口,主要確定如下三點:

  • 窗口內是什么?
    • 窗口就是 滿足其和 ≥ s 的長度最小的 連續 子數組。
  • 如何移動窗口的起始位置?
    • 窗口的起始位置如何移動:如果當前窗口的值大于等于s了,窗口就要向前移動了(也就是該縮小了)。
  • 如何移動窗口的結束位置?
    • 窗口的結束位置如何移動:窗口的結束位置就是遍歷數組的指針,也就是for循環里的索引

解題的關鍵在于 窗口的起始位置如何移動,如圖所示:

可以發現滑動窗口的精妙之處在于根據當前子序列和大小的情況,不斷調節子序列的起始位置

代碼:

#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int result = INT32_MAX;// 保存子數組的長度int sum = 0; // 滑動窗口數值之和int i = 0; // 滑動窗口的起始位置int subLength = 0; // 滑動窗口的長度for (int j = 0; j < nums.size();j++){sum += nums[j];while (sum >= target) {subLength = j - i + 1; // 計算子數組的長度result = result < subLength ? result : subLength;sum -= nums[i++];// 移動起始位置}}return result == INT32_MAX ? 0 : result;}
};int main() {vector<int> nums = { 2,3,1,2,4,3 }; // 創建一個數組int target = 7;Solution obj;// 創建一個Solution類型的對象obj,int result;//通過obj對象調用minSubArrayLen函數,并傳入參數target,numsresult = obj.minSubArrayLen(target,nums);// 輸出結果cout << "子數組的長度為: " << result << endl;
}
  • 時間復雜度:O(n)
  • 空間復雜度:O(1)

一些錄友會疑惑為什么時間復雜度是O(n)。
不要以為for里放一個while就以為是O(n^2)啊, 主要是看每一個元素被操作的次數,每個元素在滑動窗后進來操作一次,出去操作一次,每個元素都是被操作兩次,所以時間復雜度是 2 × n 也就是O(n)。

59.螺旋矩陣Ⅱ

. - 力扣(LeetCode)

題目

給定一個正整數 n,生成一個包含 1 到 n^2 所有元素,且元素按順時針順序螺旋排列的n* n正方形矩陣。
示例:

輸入: 3
輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

image.pngimage.pngimage.png

思路

模擬順時針畫矩陣的過程:

  • 填充上行從左到右
  • 填充右列從上到下
  • 填充下行從右到左
  • 填充左列從下到上

由外向內一圈一圈這么畫下去。
這里一圈下來,我們要畫每四條邊,這四條邊怎么畫,每畫一條邊都要堅持一致的左閉右開或者左開右閉的原則,這樣這一圈才能按照統一的規則畫下來。
那么我按照左閉右開的原則,來畫一圈,大家看一下:

這里每一種顏色,代表一條邊,我們遍歷的長度,可以看出每一個拐角處的處理規則,拐角處讓給新的一條邊來繼續畫。
這也是堅持了每條邊左閉右開的原則。

代碼

#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n, 0));// 使用vector定義一個二維數組int startx = 0, starty = 0;// 定義每循環一個圈的起始位置int loop = n / 2;// 每個圈循環幾次,例如n為奇數3,那么loop = 1 只是循環一圈,矩陣中間的值需要單獨處理int mid = n / 2;// 矩陣中間的位置,例如:n為3, 中間的位置就是(1,1),n為5,中間位置為(2, 2)int offset = 1; // 需要控制每一條邊遍歷的長度,每次循環右邊界收縮一位int count = 1;// 用來給矩陣中每一個空格賦值int i, j;while(loop--){i = startx;j = starty;for (j; j < n - offset; j++) { // 填充上行從左到右(左閉右開)res[i][j] = count++;}for (i; i < n - offset; i++) { // 填充右列從上到下(左閉右開)res[i][j] = count++;}for (; j > starty; j--) { // 填充下行從右到左(左閉右開)res[i][j] = count++;}for (; i > startx; i--) { // 填充左列從下到上(左閉右開)res[i][j] = count++;}// 第二圈開始的時候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startx++;starty++;// offset 控制每一圈里每一條邊遍歷的長度offset++;}if (n % 2) {res[mid][mid] = count;}return res;}
};// 輸出二維數組
void PrintVector(vector<vector<int>>& nums) {cout << "[ ";for (int i = 0; i < nums.size();i++) {cout << "[ ";for (int j = 0; j < nums.size(); j++) {cout << nums[i][j];if (j < nums.size() - 1) {cout << ", ";}		}cout << " ]";if (i < nums.size() - 1) {cout << ", ";}}cout << " ]" << endl;
}int main() {int n;cout << "請輸入正整數 n = " << endl;cin >> n;Solution obj;// 創建一個Solution類型的對象obj,vector<vector<int>> result;//通過obj對象調用generateMatrix函數,并傳入參數nresult = obj.generateMatrix(n);// 輸出結果cout << "螺旋矩陣為: " << endl;PrintVector(result);return 0;
}

image.png
image.png
image.png

  • 時間復雜度 O(n^2): 模擬遍歷二維矩陣的時間
  • 空間復雜度 O(1)

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

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

相關文章

MPI,0號進程發信息,其他進程收信息

進程0向進程1發送值: 42 進程0向進程2發送值: 42 進程0向進程3發送值: 42 進程0向進程4發送值: 42 進程0向進程5發送值: 42 進程1收到的數據是: 42 進程2收到的數據是: 42 進程3收到的數據是: 42 進程5收到的數據是: 42 進程4收到的數據是: 42 #include <mpi.h> #include…

ChatGPT4深度解析:探索智能對話新境界

大模型chatgpt4分析功能初探 目錄 1、探測目的 2、目標變量分析 3、特征缺失率處理 4、特征描述性分析 5、異常值分析 6、相關性分析 7、高階特征挖掘 1、探測目的 1、分析chat4的數據分析能力&#xff0c;提高部門人效 2、給數據挖掘提供思路 3、原始數據&#xf…

科研繪圖系列:R語言徑向柱狀圖(Radial Bar Chart)

介紹 徑向柱狀圖(Radial Bar Chart),又稱為雷達圖或蜘蛛網圖(Spider Chart),是一種在極坐標系中繪制的柱狀圖。這種圖表的特點是將數據點沿著一個或多個從中心向外延伸的軸來展示,這些軸通常圍繞著一個中心點均勻分布。 特點: 極坐標系統:數據點不是在直角坐標系中展…

王者榮耀游戲復盤

在王者榮耀中&#xff0c;復盤是一個重要的學習和提升過程。根據搜索結果&#xff0c;復盤模板通常包括以下幾個部分&#xff1a; 1. **內容&計劃**&#xff1a; 記錄你在游戲中做了什么&#xff0c;包括具體行動內容&#xff0c;明確原定目標與實際結果的差異。 2. **亮點…

【后端面試題】【中間件】【NoSQL】MongoDB查詢優化3(拆分、嵌入文檔,操作系統)

拆分大文檔 很常見的一種優化手段&#xff0c;在一些特定的業務場景中&#xff0c;會有一些很大的文檔&#xff0c;這些文檔有很多字段&#xff0c;而且有一些特定的字段還特別的大。可以考慮拆分這些文檔 大文檔對MongoDB的性能影響還是很大的&#xff0c;就我個人經驗而言&…

ASCII碼對照表【2024年匯總】

&#x1f37a;ASCII相關文章匯總如下&#x1f37a;&#xff1a; &#x1f388;ASCII碼對照表&#xff08;255個ascii字符匯總&#xff09;&#x1f388;&#x1f388;ASCII碼對照表&#xff08;Unicode 字符集列表&#xff09;&#x1f388;&#x1f388;ASCII碼對照表&#x…

Day05-04-持續集成總結

Day05-04-持續集成總結 1. 持續集成2. 代碼上線目標項目 1. 持續集成 git 基本使用, 拉取代碼,上傳代碼,分支操作,tag標簽 gitlab 用戶 用戶組 項目 , 備份,https,優化. jenkins 工具平臺,運維核心, 自由風格工程,maven風格項目,流水線項目, 流水線(pipeline) mavenpom.xmlta…

【瑞數補環境實戰】某網站Cookie補環境與后綴分析還原

文章目錄 1. 寫在前面2. 特征分析3. 接口分析3. 補JS環境4. 補后綴參數 【&#x1f3e0;作者主頁】&#xff1a;吳秋霖 【&#x1f4bc;作者介紹】&#xff1a;擅長爬蟲與JS加密逆向分析&#xff01;Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走…

二分查找2

1. 山脈數組的峰頂索引&#xff08;852&#xff09; 題目描述&#xff1a; 算法原理&#xff1a; 根據題意我們可以將數組分為兩個部分&#xff0c;一個部分是arr[mid-1]<arr[mid]&#xff0c;另一個部分為arr[mid-1]>arr[mid]&#xff0c;此時不難發現我們可以將二分…

Flink,spark對比

三&#xff1a;az 如何調度Spark、Flink&#xff0c;MR 任務 首先&#xff0c;使用java編寫一個spark任務&#xff0c;定義一個類&#xff0c;它有main方法&#xff0c;里面寫好邏輯&#xff0c;sparkConf 和JavaSparkContext 獲取上下文&#xff0c;然后打成一個jar包&#xf…

數據結構——二叉樹相關題目

1.尋找二叉樹中數值為x的節點 //尋找二叉樹中數值為x的節點 BTNode* TreeFind(BTNode* root, BTDataType x)//傳過來二叉樹的地址和根的地址&#xff0c;以及需要查找的數據 {if (root Null){return Null;}//首先需要先判斷這個樹是否為空&#xff0c;如果為空直接返回空if (…

【JavaWeb程序設計】JSP實現購物車功能

目錄 一、結合之前所學的相關技術&#xff0c;編寫代碼實現以下購物車功能 1. 我實現的功能運行截圖如下 &#xff08;1&#xff09;商品列表頁面home.jsp &#xff08;2&#xff09;登錄賬號頁面/未登錄點擊結賬頁面 &#xff08;3&#xff09;重新登錄頁面&#xff08;記…

昇思25天學習打卡營第18天|ShuffleNet圖像分類

一、簡介&#xff1a; ShuffleNetV1是曠視科技提出的一種計算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一樣主要應用在移動端&#xff0c;所以模型的設計目標就是利用有限的計算資源來達到最好的模型精度。ShuffleNetV1的設計核心是引入了兩種操作&#xff1a;Poin…

如何在centos7安裝Docker

在centOS7中我們可以使用火山引擎鏡像源鏡像安裝Docker,以下是具體的安裝步驟。 step 1: 安裝必要的一些系統工具 sudo yum install -y yum-utils Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo https://mirrors.ivolces.com/docker/linux/centos/docker-ce.r…

力扣雙指針算法題目:二叉樹的層序遍歷(BFS)

目錄 1.題目 2.思路解析 3.代碼 1.題目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 對二叉樹進行層序遍歷&#xff0c;顧名思義&#xff0c;就是按每一層的順序對二叉樹一層一層地進行遍歷 思路如下 從第一層開始&#xff0c;先將二叉樹地頭放入隊列q&#xff0…

獨孤思維:副業被罵煞筆,割韭菜

做副業不要被外界干擾&#xff0c;不要被情緒牽絆。 不要因為別人的無心謾罵&#xff0c;隨口一評&#xff0c;就偃旗息鼓。 不要因為自己的情緒需要&#xff0c;找存在感&#xff0c;尋求人安慰。 他強任他強&#xff0c;清風拂山崗。 他橫由他橫&#xff0c;明月照大江。…

2007-2022年中國各企業數字化轉型與供應鏈效率

企業數字化轉型與供應鏈效率是現代企業管理和發展的兩個關鍵方面。以下是對中國各企業數字化轉型與供應鏈效率數據的介紹&#xff1a; 數據簡介 企業數字化轉型&#xff1a;指企業通過采用數字技術與創新方法&#xff0c;改造業務流程、組織結構和產品服務&#xff0c;以提升…

UCOS-III 系統移植

1. 移植前準備 1.1 源碼下載 UCOS-III Kernel Source&#xff1a; https://github.com/weston-embedded/uC-OS3.git Micriμm CPU Source &#xff1a; https://github.com/weston-embedded/uC-CPU.git Micriμm Lib Source&#xff1a; https://github.com/weston-embedded…

Nginx配置文件全解:從入門到設計

Nginx配置文件全解&#xff1a;從入門到架構設計 1. Nginx配置文件基礎 Nginx的主配置文件通常位于/etc/nginx/nginx.conf?。配置文件使用簡單的文本格式&#xff0c;由指令和指令塊組成。 1.1 基本語法規則 每個指令以分號(;)結束指令塊用大括號({})包圍配置文件支持使用…

多方SQL計算場景下,如何達成雙方共識,確認多方計算作業的安全性

安全多方計算在SQL場景下的限制 隨著MPC、隱私計算等概念的流行&#xff0c; 諸多政府機構、金融企業開始考慮參與到多方計算的場景中&#xff0c; 擴展數據的應用價值。 以下面這個場景為例&#xff0c; 銀行可能希望獲取水電局和稅務局的數據&#xff0c;來綜合計算得到各…