【算法專題訓練】06、數組雙指針

1、數組

  • 數組是由相同類型的元素組成的數據集合,并且占據一塊連續的內存,按照順序存儲數據。

1.1、數組的特性:

  • 數組元素通過下標獲取數據
  • 數組對象初始化時,需要先指定數組容量大小,并根據容量大小分配內存。
  • 缺點:需要為所有的數據預先分配內存,可能存在空閑的區域沒有得到充分利用。

1.2、動態數組

  • 先為數組分配較小的內存空間,然后在需要的時候,在數組中添加新的數據。
  • 當容量不足時,需要重新分配一塊更大的空間,要把之前的數據復制到新的數組中,再把之前的內存釋放。
  • 缺點:數據拷貝時,需要進行大量的額外操作。

2、指針

  • 能定位數據容器中(也就是內存中)某個數據的手段。也就是數據的句柄或者地址。

2.1、雙指針

  • 雙指針是一種解題方法
  • 方向相反的雙指針經常用來求排序數組中的兩個數字之和。通常分別指向數組的首位兩端,根據結果值對兩端的指針進行向中間移動。
  • 方向相同的雙指針通常用來求正數數組中子數組的和或乘積。

3、LCR 006 兩數之和

3.1、題目信息:

  • https://leetcode.cn/problems/kLl5u1/description/
給定一個已按照 升序排列  的整數數組 numbers ,請你從數組中找出兩個數滿足相加之和等于目標數 target 。
函數應該以長度為 2 的整數數組的形式返回這兩個數的下標值。numbers 的下標 從 0 開始計數 ,所以答案數組應當滿足 0 <= answer[0] < answer[1] < numbers.length 。
假設數組中存在且只存在一對符合條件的數字,同時一個數字不能使用兩次。示例 1:
輸入:numbers = [1,2,4,6,10], target = 8
輸出:[1,3]
解釋:26 之和等于目標數 8 。因此 index1 = 1, index2 = 3 。示例 2:
輸入:numbers = [2,3,4], target = 6
輸出:[0,2]示例 3:
輸入:numbers = [-1,0], target = -1
輸出:[0,1]

3.2、解題思路

  • 輸入一個整數數組和一個目標整數,要求從數組中找出兩個數,要求他們的和等于目標整數,返回兩個元素的下標數組

1)、暴力解法

  • 雙層for循環,遍歷數組獲得整數元素,然后遍歷其他元素,判斷他們的和是否等于目標值
  • 時間復雜度n的平方,沒有使用到數組元素是升序排序的特性
  • 代碼簡單,不實現

2)、哈希表解法

  • 遍歷數組元素,遍歷的過程中,判斷目標值與遍歷元素的差值,判斷差值是否在哈希表中,如果存在則返回下標數組
  • 如果不存在,則將當前遍歷的元素和下標值,保存到哈希表中
vector<int> twoSum(vector<int> &numbers, int target)
{vector<int> res;std::map<int, int> map;for (int i = 0; i < numbers.size(); i++){int num = target - numbers[i];if (map.find(num) != map.end()) // 存在,取出下標值{res.push_back(map[num]);res.push_back(i);break;}map[numbers[i]] = i;}return res;
}

3)、雙指針解法

  • 定義兩個下標,從數組的兩端開始往中間遍歷
  • 如果遍歷到的兩個元素的和等于目標值,則直接返回,如果兩元素和大于目標值,則right角標左移,否則left角標右移
vector<int> twoSum(vector<int> &numbers, int target)
{vector<int> res;int left = 0;int right = numbers.size() - 1;while (left < right && target != (numbers[left] + numbers[right])){if (numbers[left] + numbers[right] < target){left++;}else{right--;}}res.push_back(left);res.push_back(right);return res;
}

4、總結

  • 數組特性,具有相同數據類型的數據集合,在內存中按順序連續存儲,數組對象就是數據的指針,可通過下標獲取到數組中元素的值
  • 數組優缺點:可通過數組索引下標直接獲取元素值,在數組尾部添加數據,插入與刪除數據需要進行數據移動; 數組使用前需要預先分配內存,有可能有些內存沒有使用到。
  • 動態內存,剛開始分配一個小容量的內存,當數據量增加時進行擴容,需要將原數據拷貝到新的數組中。
  • 指針概念,就是可以從內存中獲取數據的方式
  • 雙指針,是一種解題思路,分為相向指針和相反指針。
  • map數據結構使用,查找是否存在某個值使用find方法

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

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

相關文章

操作系統-lecture2(操作系統結構)

回顧下lecture1 swap區域不可以馬上執行&#xff0c;即虛擬內存的數據和指令不可以被執行&#xff0c;得交換回到內存區域 操作系統的服務 主要提供兩種服務 面向普通用戶&#xff1a;user interface面向程序員&#xff1a;應用級程序代碼 為用戶 為用戶提供了操作包括但不…

內網服務器實現從公網穿透

從6月份tplink的ddns失效之后&#xff0c;對于部分在內網運行的服務器&#xff0c;從公網訪問就收到了部分影響。有好幾個朋友找來&#xff0c;尋求幫助&#xff0c;看看怎么恢復原來的機制&#xff0c;可以從公網互聯網訪問內網服務器。方案一&#xff1a;如果有動態公網的客戶…

vcs-編譯+仿真+dump波形【IMP】

VCS仿真分為兩步式(編譯/compilation仿真/simulation)和三步式(分析/analysis細化/elaborationsimulation/仿真);注2:analysis/分析是三步式flow中仿真design的第一步&#xff0c;在此階段將使用vhdlan或vlogan分析VHDL、Verilog、SystemVerilog和OpenVera文件。下面的部分包括…

程序代碼篇---python向http界面發送數據

在 Python 中向 HTTP 界面發送數據&#xff0c;本質上是模擬用戶在網頁上填寫表單、點擊提交按鈕的過程。這在自動化測試、數據上報、接口調用等場景中非常常用。下面用通俗易懂的方式介紹具體方法、實例代碼和解析。核心原理網頁上的數據發送&#xff08;比如提交表單&#xf…

mybatis-plus由mysql改成達夢數據庫

前置條件: 達夢數據庫設置了大小寫敏感,我比較菜,改不動!先這么湊合著用吧; 因為設置了大小寫敏感,所以所有的sql語句都要加 引號; 這樣是會報錯的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config這樣才可以 SELECT "create_…

設計模式:外觀模式 Facade

目錄前言問題解決方案結構代碼前言 外觀是一種結構型設計模式&#xff0c;能為程序庫、框架或其他復雜類提供一個簡單的接口。 問題 假設你必須在代碼中使用某個復雜的庫或框架中的眾多對象。正常情況下&#xff0c; 你需要負責所有對象的初始化工作、 管理其依賴關系并按正確…

【數據結構初階】--二叉樹(四)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

三、平面度檢測-差值法

方法一: dev_get_window (WindowHandle) *讀取3通道彩色融合圖 read_image (Image, ./XYZ彩色融合圖.tiff) *拆分3個通道 decompose3 (Image, x, y, z) *將3個通道圖像轉換為3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *顯示動態3D模型 threshold (z, Regions,…

什么是數據編排?數據編排的流程、優勢、挑戰及工具有哪些?

目錄 一、數據編排的定義與概念 1.數據編排的基本含義 2.數據編排與相關概念的區別 3.數據編排的重要性 二、數據編排的流程 1.需求分析&#xff1a; 2.數據源識別與連接&#xff1a; 3.數據抽取&#xff1a; 4.數據轉換&#xff1a; 5.數據加載&#xff1a; 6.監控…

【C++算法】82.BFS解決FloodFill算法_被圍繞的區域

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 130. 被圍繞的區域 題目描述&#xff1a; 解法 BFS一層層剝開。 C 算法代碼&#xff1a; class Solution {// 定義四個方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商湯發布具身智能平臺,讓機器人像人一樣和現實世界交互

7月27日&#xff0c;在“大愛無疆模塑未來”WAIC 2025大模型論壇上&#xff0c;商湯科技重磅發布「悟能」具身智能平臺。「悟能」具身智能平臺以商湯具身世界模型為核心引擎&#xff0c;依托商湯大裝置提供端側和云側算力支持&#xff0c;能夠為機器人、智能設備提供強大的感知…

MCP工作原理

在談MCP原理前&#xff0c;我們先談談MCP的技術前身—Function Calling。1.Function Calling技術在FunctionCalling技術出現之前&#xff0c;大語言模型雖然擁有強大的知識儲備和語言理解能力&#xff0c;但是只能提供自身數據庫已有的信息&#xff0c;無法和外界進行信息交互。…

VSCode手動版本更新

技術背景 使用VSCode的的過程中&#xff0c;如果打開了自動更新功能&#xff0c;每隔一段時間就會有更新提示。為了保持版本的穩定性&#xff0c;我們可以在設置中將Update: Mode設置為none&#xff0c;這樣就不會觸發自動更新。但有時又有版本更新的需求&#xff0c;可能是版本…

醫療超聲成像專用AFE模擬前端

醫療超聲成像作為一種廣泛應用于臨床診斷的重要技術&#xff0c;對于提供清晰、準確的醫學圖像起著關鍵作用。在超聲成像系統中&#xff0c;AFE模擬前端扮演著至關重要的角色。它負責對超聲換能器接收到的微弱電信號進行處理和轉換&#xff0c;為后續的數字信號處理提供高質量的…

機器學習之線性回歸——小白教學

一、線性回歸簡介1.什么是線性回歸線性回歸(Linear regression)是利?回歸?程(函數)對?個或多個?變量(特征值)和因變量(?標值)之間關系進?建模的?種分析?式。特點&#xff1a;只有?個?變量的情況稱為單變量回歸&#xff0c;多于?個?變量情況的叫做多元回歸線性回…

.NET 10 中的新增功能系列文章1——運行時中的新增功能

引言 隨著 .NET 10 預覽版6的發布&#xff0c;微軟在運行時層面帶來了一系列重要的性能改進和新功能。這些改進主要集中在JIT編譯器優化、硬件指令集支持、內存管理等方面&#xff0c;旨在進一步提升應用程序的執行效率和資源利用率。本文將詳細解析這些運行時增強功能&#x…

安寶特方案丨AI算法能力開放平臺:適用于人工裝配質檢、點檢、實操培訓

當前工業AI圖形識別算法的應用存在投入成本高、維護更新難、依賴固定相機、應用范圍窄、與實際作業脫節等問題。 針對以上情況&#xff0c;安寶特提出了“AI算法能力開放平臺”&#xff0c;目的是讓AI圖形識別算法可以與現場實際的人工點檢作業、裝配作業、質檢作業、培訓作業…

水下目標識別準確率↑89%!陌訊多模態融合算法在智慧水務的落地實踐

一、行業痛點&#xff1a;智慧水務的檢測困境據《2024城市水務智能化白皮書》統計&#xff0c;傳統水務檢測面臨三大挑戰&#xff1a;??水體干擾??&#xff1a;渾濁度>100NTU時&#xff0c;目標漏檢率高達65%??動態環境??&#xff1a;水流擾動導致目標形變&#xff…

手動開發一個串口調試工具(三):基于 Qt Widgets 搭建串口調試界面

在上一篇中&#xff0c;我們通過 QCoreApplication 構建了一個基礎的串口收發控制臺程序&#xff0c;并實現了周期發送、十六進制轉換和數據讀取等核心功能。本篇將基于此邏輯&#xff0c;進一步將其封裝為一個圖形化界面程序&#xff0c;借助 Qt Widgets 提供的控件搭建完整的…

量子計算革命:重新定義計算的邊界與未來

引言&#xff1a;我們正站在計算革命的新起點 當IBM在2019年宣布實現"量子霸權"時&#xff0c;很多人認為這只是實驗室里的科學突破。然而&#xff0c;短短幾年后&#xff0c;量子計算已經從理論走向實踐&#xff0c;從實驗室走向產業應用。我們正站在一個全新的計算…