基礎算法——順序表

一、詢問學號

題?來源:洛?

題?鏈接:P3156 【深基15.例1】詢問學號 - 洛谷

難度系數:★

1. 題目描述

2. 算法原理

直接? vector 或者數組模擬即可。

3. 參考代碼

#include <iostream>
#include <vector>using namespace std;const int N = 2e6 + 10;int n, m;
vector<int> a(N);int main()
{cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];while(m--){int x; cin >> x;cout << a[x] << endl;}return 0;
}

二、寄包柜

題?來源:洛?

題?鏈接:P3613 【深基15.例2】寄包柜 - 洛谷

難度系數:★

1. 題目描述

2. 算法原理

解法1:創建二維數組(空間復雜度過高)

解法2:使用vector——vector<int> a[N]

注意

  • vector<int> a[N]?定義了一個包含?N?個?vector<int>?對象的數組。(類似二維數組)
  • vector<int> a(N)?定義了一個?vector<int>?對象?a,并將其初始化為包含?N?個元素,這些元素的初始值默認為 0(對于?int?類型)。

3. 參考代碼

#include <iostream>
#include <vector>using namespace std;const int N = 1e5 + 10;int n, q;
vector<int> a[N]; // 創建 N 個柜子int main()
{cin >> n >> q;while(q--){int op, i, j, k;cin >> op >> i >> j;if(op == 1) // 存{cin >> k;if(a[i].size() <= j){// 擴容a[i].resize(j + 1);}a[i][j] = k;}else // 查詢{cout << a[i][j] << endl;}}return 0;
}

三、移動零

題?來源:?扣

題?鏈接:283. 移動零 - 力扣(LeetCode)

難度系數:★

1. 題目描述?

2. 算法原理

利用雙指針

類?數組分兩塊的算法思想,這?是將數組分成三塊,那么我們可以再添加?個指針,實現數組分三 塊。

設數組??為 n ,定義三個指針 left, cur,right :

  • left :?來標記 0 序列的末尾,因此初始化為 -1 ;
  • cur?來掃描數組,初始化為 0 ;?
  • right :?來標記 2 序列的起始位置,因此初始化為 n? 。

在往后掃描的過程中,保證:

  • [0, left] 內的元素都是 0 ;
  • [left + 1,cur ? 1]內的元素都是 1 ;?
  • [cur, right ? 1] 內的元素是待定元素;
  • [right, n]?內的元素都是 2 。

3. 參考代碼

class Solution 
{
public:void moveZeroes(vector<int>& nums) {for(int i = 0, cur = -1; i < nums.size(); i++){if(nums[i]) // 非0元素{swap(nums[++cur], nums[i]);}}}
};

四、顏?分類

題?來源:?扣?

題?鏈接:75. 顏色分類 - 力扣(LeetCode)

難度系數:★

1. 題目描述

2. 算法原理

類?數組分兩塊的算法思想,這?是將數組分成三塊,那么我們可以再添加?個指針,實現數組分三 塊。

設數組??為 ,定義三個指針left, cur,right :

  • left:?來標記 序列的末尾,因此初始化為 ;
  • cur:?來掃描數組,初始化為 ;
  • right:?來標記 序列的起始位置,因此初始化為 。

在 往后掃描的過程中,保證:

  • [0, left]?內的元素都是 ;
  • [left + 1,cur ? 1]?內的元素都是 ;
  • [cur, right ? 1]?內的元素是待定元素;
  • [right, n]?內的元素都是 。

??

?

3. 參考代碼

class Solution 
{
public:void sortColors(vector<int>& nums) {int left = -1, i = 0, right = nums.size();while(i < right){if(nums[i] == 0) swap(nums[++left], nums[i++]);else if(nums[i] == 1) i++;else swap(nums[--right], nums[i]);}}
};

五、合并兩個有序數組

題?來源:?扣

題?鏈接:88. 合并兩個有序數組 - 力扣(LeetCode)

難度系數:★

1. 題目描述

2. 算法原理

解法?:利?輔助數組(需要學會,歸并排序的核?步驟)

可以創建?個輔助數組,然后?兩個指針分別指向兩個數組。每次拿出?個較?的元素放在輔助數組 中,直到把所有元素全部放在輔助數組中。最后把輔助數組的結果覆蓋到?nums1 中。

解法?:原地修改(本題的最優解)

與解法?的核?思想是?樣的。

由于第?個數組的空間本來就是 n+m 個,所以我們可以直接把最終結果放在 nums1 中。 nums1 中。為了不 覆蓋未遍歷到的元素,定義兩個指針指向兩個數組的末尾,從后往前掃描。每次拿出較?的元素也是 從后往前放在 nums1 的后?,直到把所有元素全部放在 nums1 中。

注意:從前往后遍歷會出現覆蓋的情況

3. 參考代碼

//解法一
class Solution 
{
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {// 解法一:利用輔助數組vector<int> tmp(m + n);int cur = 0, cur1 = 0, cur2 = 0;while(cur1 < m && cur2 < n){if(nums1[cur1] <= nums2[cur2]) tmp[cur++] = nums1[cur1++];else tmp[cur++] = nums2[cur2++];}while(cur1 < m) tmp[cur++] = nums1[cur1++];while(cur2 < n) tmp[cur++] = nums2[cur2++];for(int i = 0; i < n + m; i++) nums1[i] = tmp[i];}
};//解法二
class Solution 
{
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {// 解法二:原地合并int cur1 = m - 1, cur2 = n - 1, cur = m + n - 1;while(cur1 >= 0 && cur2 >= 0){if(nums1[cur1] >= nums2[cur2]) nums1[cur--] = nums1[cur1--];else nums1[cur--] = nums2[cur2--];}while(cur2 >= 0) nums1[cur--] = nums2[cur2--];}
};

六、The Blocks Problem

題?來源:洛?

題?鏈接:UVA101 The Blocks Problem - 洛谷

難度系數:★★

2. 算法原理

本質是?個模擬題,可以??vector?來模擬,注意細節問題。

3. 參考代碼

#include <iostream>
#include <vector>using namespace std;const int N = 30;
typedef pair<int, int> PII;int n;
vector<int> p[N]; // 創建 n 個放木塊的槽PII find(int x)
{for(int i = 0; i < n; i++){for(int j = 0; j < p[i].size(); j++){if(p[i][j] == x){return {i, j};}}}
}void clean(int x, int y)
{// 把 [x, y] 以上的木塊歸位for(int j = y + 1; j < p[x].size(); j++){int t = p[x][j];p[t].push_back(t);}p[x].resize(y + 1);
}void move(int x1, int y1, int x2)
{// 把 [x1, y1] 及其以上的木塊放在 x2 上面for(int j = y1; j < p[x1].size(); j++){p[x2].push_back(p[x1][j]);}p[x1].resize(y1);
}int main()
{cin >> n;// 初始化for(int i = 0; i < n; i++){p[i].push_back(i);}string op1, op2;int a, b;while(cin >> op1 >> a >> op2 >> b){// 查找 a 和 b 的位置PII pa = find(a);int x1 = pa.first, y1 = pa.second;PII pb = find(b);int x2 = pb.first, y2 = pb.second;if(x1 == x2) continue; // 處理不合法的操作if(op1 == "move") // 把 a 上方歸位{clean(x1, y1);}if(op2 == "onto") // 把 b 上方歸位{clean(x2, y2);}move(x1, y1, x2);}// 打印for(int i = 0; i < n; i++){cout << i << ":";for(int j = 0; j < p[i].size(); j++){cout << " " << p[i][j];}cout << endl;}return 0;
}

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

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

相關文章

Ubuntu用戶安裝cpolar內網穿透

前言 Cpolar作為一款體積小巧卻功能強大的內網穿透軟件&#xff0c;不僅能夠在多種環境和應用場景中發揮巨大作用&#xff0c;還能適應多種操作系統&#xff0c;應用最為廣泛的Windows、Mac OS系統自不必多說&#xff0c;稍顯小眾的Linux、樹莓派、群輝等也在起支持之列&#…

C#實現高性能異步文件下載器(支持進度顯示/斷點續傳)

一、應用場景分析 異步文件下載器用處很大&#xff0c;當我們需要實現以下功能時可以用的上&#xff1a; 大文件下載&#xff08;如4K視頻/安裝包&#xff09; 避免UI線程阻塞&#xff0c;保證界面流暢響應多任務并行下載 支持同時下載多個文件&#xff0c;提升帶寬利用率后臺…

Oracle比較好的幾本書籍

1.《Oracle專家高級編程》 2.《Oracle高效設計》 3.《Oracle9i&10g&11g編程藝術深入數據庫體系結構》 4.《讓Oracle跑的更快》(1/2) ....... n.《Oracle官方文檔的閱讀》下面包括這幾個部分&#xff0c;可以跟進研讀一下&#xff1a; &#xff08;1&#xff09;《…

js和java中方法重載(js本身是不支持方法重載,方便對比學習)

js如果需要實現方法重載 示例 1&#xff1a;根據參數數量實現重載 function overloadExample() {if (arguments.length 1) {console.log(一個參數:, arguments[0]);} else if (arguments.length 2) {console.log(兩個參數:, arguments[0], arguments[1]);} else {console.l…

Android : Camera之CHI API

來自&#xff1a; https://www.cnblogs.com/szsky/articles/10861918.html 一、CAM CHI API功能介紹&#xff1a; CHI API建立在Google HAL3的靈活性基礎之上&#xff0c;目的是將Camera2/HAL3接口分離出來用于使用相機功能&#xff0c;它是一個靈活的圖像處理驅動程序&#…

Netty基礎—2.網絡編程基礎四

大綱 1.網絡編程簡介 2.BIO網絡編程 3.AIO網絡編程 4.NIO網絡編程之Buffer 5.NIO網絡編程之實戰 6.NIO網絡編程之Reactor模式 5.NIO網絡編程之Buffer (1)Buffer的作用 Buffer的作用是方便讀寫通道(Channel)中的數據。首先數據是從通道(Channel)讀入緩沖區&#xff0c;從…

Git前言(版本控制)

1.Git 目前世界上最先進的分布式版本控制系統。 git官網&#xff1a;https://git-scm.com/ 2.版本控制 2.1什么是版本控制 版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容修改歷史&#xff0c;方便查看更改歷史記錄備份以便恢復以前…

調試正常 ≠ 運行正常:Keil5中MicroLIB的“量子態BUG”破解實錄

調試正常 ≠ 運行正常&#xff1a;Keil5中MicroLIB的“量子態BUG”破解實錄——從勾選一個選項到理解半主機模式&#xff0c;嵌入式開發的認知升級 &#x1f4cc; 現象描述&#xff1a;調試與燒錄的詭異差異 在線調試時 程序正常運行 - 獨立運行時 設備無響應 ! 編譯過程 0 Err…

算法每日一練 (9)

&#x1f4a2;歡迎來到張胤塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 算法每日一練 (9)最小路徑和題目描述解題思路解題代碼…

【高項】信息系統項目管理師(四)項目整合管理【4分】

一、管理基礎 項目整合管理的責任不能被授權或轉移&#xff0c;項目經理必須對整個項目承擔最終責任。 執行項目整合時項目經理承擔雙重角色&#xff1a; 1、組織層面上&#xff0c;項目經理扮演重要角色&#xff0c;與項目發起人攜手合作&#xff0c;了解戰略目標并確保項目目…

ECEF與ENU坐標系定義及C語言實現

一、ECEF與ENU坐標系定義 ECEF坐標系&#xff08;地心地固坐標系&#xff09; 原點&#xff1a;地球質心X軸&#xff1a;指向本初子午線與赤道交點Y軸&#xff1a;在赤道平面內與X軸垂直Z軸&#xff1a;指向北極數學表示&#xff1a; P e c e f ( x , y , z ) P_{ecef} (x,…

sql語句分頁的關鍵字是?

在 SQL 中&#xff0c;分頁通常是通過限制查詢結果的數量并指定從哪一行開始獲取數據來實現的。不同的數據庫系統使用不同的分頁關鍵字。 以下是常見數據庫系統的分頁關鍵字&#xff1a; MySQL / PostgreSQL / SQLite 使用 LIMIT 和 OFFSET 來進行分頁&#xff1a; LIMIT 限…

大模型中的剪枝、蒸餾是什么意思?

環境&#xff1a; 剪枝 蒸餾 問題描述&#xff1a; 大模型中的剪枝、蒸餾是什么意思&#xff1f; 解決方案&#xff1a; 大模型的剪枝&#xff08;Pruning&#xff09;和蒸餾&#xff08;Distillation&#xff09;是兩種常見的模型優化技術&#xff0c;用于減少模型的大小…

初次體驗Tauri和Sycamore(3)通道實現

? 原創作者&#xff1a;莊曉立&#xff08;LIIGO&#xff09; 原創時間&#xff1a;2025年03月10日&#xff08;發布時間&#xff09; 原創鏈接&#xff1a;https://blog.csdn.net/liigo/article/details/146159327 版權所有&#xff0c;轉載請注明出處。 20250310 LIIGO備注&…

代碼隨想錄|二叉樹|07二叉樹周末總結

對前面01~06二叉樹內容進行小結&#xff0c;直接看下面的總結文檔&#xff1a; 本周小結&#xff01;&#xff08;二叉樹&#xff09; | 代碼隨想錄

藍耘賦能通義萬相 2.1:用 C++ 構建高效 AI 視頻生成生態

目錄 開篇&#xff1a;AI 視頻生成新時代的號角 通義萬相 2.1&#xff1a;AI 視頻生成的領軍者 核心技術揭秘 功能特點展示 與其他模型的全面對比 C&#xff1a;高效編程的基石 C 的發展歷程與特性 C 在 AI 領域的廣泛應用 通義萬相 2.1 與 C 的完美融合 融合的意義與…

【一句話經驗】ubuntu vi/vim 模式自動設置為paste

從centos過來&#xff0c;發現ubutun有些地方不習慣&#xff0c;尤其是vi的粘貼&#xff0c;默認自動進去了代碼模式&#xff0c;導致每次粘貼必須得set paste&#xff0c;否則會出現問題。 解決辦法非常簡單&#xff0c;按照下面命令執行即可&#xff1a; cd ~ echo "…

自然語言處理文本分析:從詞袋模型到認知智能的進化之旅

清晨&#xff0c;當智能音箱準確識別出"播放周杰倫最新專輯"的模糊語音指令時&#xff1b;午間&#xff0c;企業輿情系統自動標記出十萬條評論中的負面情緒&#xff1b;深夜&#xff0c;科研人員用GPT-4解析百萬篇論文發現新材料線索——這些場景背后&#xff0c;是自…

《Python基礎教程》附錄B筆記:Python參考手冊

《Python基礎教程》第1章筆記&#x1f449;https://blog.csdn.net/holeer/article/details/143052930 附錄B Python參考手冊 Python標準文檔是完整的參考手冊。本附錄只是一個便利的速查表&#xff0c;當你開始使用Python進行編程后&#xff0c;它可幫助你喚醒記憶。 B.1 表…

uniapp+Vue3 組件之間的傳值方法

一、父子傳值&#xff08;props / $emit 、ref / $refs&#xff09; 1、props / $emit 父組件通過 props 向子組件傳遞數據&#xff0c;子組件通過 $emit 觸發事件向父組件傳遞數據。 父組件&#xff1a; // 父組件中<template><view class"container">…