base64 能放數組里面么_數組:總結篇

我們做個總結吧

數組理論基礎

數組是非常基礎的數據結構,在面試中,考察數組的題目一般在思維上都不難,主要是考察對代碼的掌控能力

也就是說,想法很簡單,但實現起來 可能就不是那么回事了。

首先要知道數組在內存中的存儲方式,這樣才能真正理解數組相關的面試題

「數組是存放在連續內存空間上的相同類型數據的集合。」

數組可以方便的通過下表索引的方式獲取到下表下對應的數據。

舉一個字符數組的例子,如圖所示:

21193e24ac7ed37fba94f5186f27086a.png

需要兩點注意的是

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

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

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

3e1c2fdef069419a33e779f3b14f6ad1.png

而且大家如果使用C++的話,要注意vector 和 array的區別,vector的底層實現是array,嚴格來講vector是容器,不是數組。

「數組的元素是不能刪的,只能覆蓋。」

那么二維數組直接上圖,大家應該就知道怎么回事了

2aedf4f5e3c619fe68f61879a625f06f.png

「那么二維數組在內存的空間地址是連續的么?」

我們來舉一個例子,例如:int[][] rating = new int[3][4]; , 這個二維數據在內存空間可不是一個 3*4 的連續地址空間

看了下圖,就應該明白了:

9bee85f8d8c2bbfb45bbdcbf45798f94.png

所以「二維數據在內存中不是 3*4 的連續地址空間,而是四條連續的地址空間組成!」

數組的經典題目

在面試中,數組是必考的基礎數據結構。

其實數據的題目在思想上一般比較簡單的,但是如果想高效,并不容易。

我們之前一共講解了四道經典數組題目,每一道題目都代表一個類型,一種思想。

二分法

數組:每次遇到二分法,都是一看就會,一寫就廢

這道題目呢,考察的數據的基本操作,思路很簡單,但是在通過率在簡單題里并不高,不要輕敵。

可以使用暴力解法,通過這道題目,如果要求更優的算法,建議試一試用二分法,來解決這道題目

暴力解法時間復雜度:O(n)
二分法時間復雜度:O(logn)

在這道題目中我們講到了「循環不變量原則」,只有在循環中堅持對區間的定義,才能清楚的把握循環中的各種細節。

「二分法是算法面試中的常考題,建議通過這道題目,鍛煉自己手撕二分的能力」

雙指針法

數組:就移除個元素很難么?

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

暴力解法時間復雜度:O(n^2)
雙指針時間復雜度:O(n)

這道題目迷惑了不少同學,糾結于數組中的元素為什么不能刪除,主要是因為以下兩點:

  • 數組在內存中是連續的地址空間,不能釋放單一元素,如果要釋放,就是全釋放(程序運行結束,回收內存棧空間)。
  • C++中vector和array的區別一定要弄清楚,vector的底層實現是array,所以vector展現出友好的一些都是因為經過包裝了。

雙指針法(快慢指針法)在數組和鏈表的操作中是非常常見的,很多考察數組和鏈表操作的面試題,都使用雙指針法。

滑動窗口

數組:滑動窗口拯救了你

本題介紹了數組操作中的另一個重要思想:滑動窗口。

暴力解法時間復雜度:O(n^2)
滑動窗口時間復雜度:O(n)

本題中,主要要理解滑動窗口如何移動 窗口起始位置,達到動態更新窗口大小的,從而得出長度最小的符合條件的長度。

「滑動窗口的精妙之處在于根據當前子序列和大小的情況,不斷調節子序列的起始位置。從而將O(n^2)的暴力解法降為O(n)。」

如果沒有接觸過這一類的方法,很難想到類似的解題思路,滑動窗口方法還是很巧妙的。

模擬行為

數組:這個循環可以轉懵很多人

模擬類的題目在數組中很常見,不涉及到什么算法,就是單純的模擬,十分考察大家對代碼的掌控能力。

在這道題目中,我們再一次介紹到了「循環不變量原則」,其實這也是寫程序中的重要原則。

相信大家又遇到過這種情況:感覺題目的邊界調節超多,一波接著一波的判斷,找邊界,踩了東墻補西墻,好不容易運行通過了,代碼寫的十分冗余,毫無章法,其實「真正解決題目的代碼都是簡潔的,或者有原則性的」,大家可以在這道題目中體會到這一點。

總結

從二分法到雙指針,從滑動窗口到螺旋矩陣,相信如果大家真的認真做了「代碼隨想錄」每日推薦的題目,定會有所收獲。

推薦的題目即使大家之前做過了,再讀一遍的文章,也會幫助你提煉出解題的精髓所在。

「如果感覺有所收獲,希望大家多多支持,打卡轉發,點贊在看 都是對我最大的鼓勵!」

最后,大家周末愉快!

在留言區留下你的思路吧!

-------end-------

我將算法學習相關的資料已經整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面還有leetcode刷題攻略、各個類型經典題目刷題順序、思維導圖看一看一定會有所收獲!

每天8:35準時推送一道經典算法題目,推送的每道題目都不是孤立的,而是由淺入深,環環相扣,幫你梳理算法知識脈絡,輕松學算法!

「@代碼隨想錄」期待你的關注!

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

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

相關文章

xampp mysql 卸載_卸載Xampp并安裝apache + mysql + php 過程

首先是卸載xampp,打開xampp-control.exe 控制面板,停止apache和mysql服務。如果你是安裝版xampp,可以到如果不是則安裝如下方法。停止服務之后。就需要卸載服務。打開cmd,用sc.exe這個Windows命令開始——運行——cmd.exe&#xf…

python判斷正確錯誤_python錯誤和異常

Python3 錯誤和異常 作為 Python 初學者,在剛學習 Python 編程時,經常會看到一些報錯信息,在前面我們沒有提及,這章節我們會專門介紹。 Python 有兩種錯誤很容易辨認:語法錯誤和異常。 Python assert(斷言&…

nodejs mysql 返回json_python向mysql中存儲JSON及Nodejs取出

雖然把JSON數據存入mysql也是比較蛋疼,但是相比使用Nodejs嵌套處理多個mysql查詢并拼接返回數據也算是沒mongo時的一個折中方案了。我使用python拼接了一個json格式的字符串,卻遇到了一些問題1,如果把json數據轉成str存入,那么nod…

17個常用經典數據可視化圖表與冷門圖表

數據可視化是創建信息圖形表示的過程。隨著可視化技術的飛速發展,可以利用強大的可視化工具選擇合適的數據可視化圖表來展示數據。以下專業人士都應該知道的一些最重要的數據可視化圖表。 常見數據可視化圖表 餅圖 餅圖是最常見和最基本的數據可視化圖表之一。餅圖…

python keyerror_盤點Python 初學者最容易犯的10大錯誤!你中招了嗎?

對于新手,初學Python時,總會遇到這樣那樣的報錯,想要弄懂Python錯誤信息的含義可能還不知道怎么做,這里列出了一些比較常見的Python報錯問題,希望對于學習Python的人能夠有些幫助。發現有很多想要學習Python卻不知道如…

mysql index sub part_mysql中的key和index 理解

mysql的key和index多少有點令人迷惑,這實際上考察對數據庫體系結構的了解的。1 key 是數據庫的物理結構,它包含兩層意義,一是約束(偏重于約束和規范數據庫的結構完整性),二是索引(輔助查詢用的)。包括primary key, unique key, fo…

【spring cloud】(六)消息總線——springcloud Bus

各位小伙伴們大家好,歡迎來到這個小扎扎的spring cloud專欄,在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Bus…

python快速排序代碼_Python實現快速排序算法

原標題:Python實現快速排序算法 Python實現快速排序算法 快速排序算法是一種基于交換的高效的排序算法,由C.R.A.Hoare于1962年提出,是一種劃分交換排序。它采用了一種分治的策略,通常稱其為分治法(Divide and conquer algorithm)。…

docker mysql 生產環境_如何部署Docker MySQL生產環境?

1 前言Docker容器原則上是短暫的,如果容器被刪除或損毀,數據或配置將丟失,所以上個章節部署的MySQL只適合于測試環境,由于生產的需求,本章將使用Docker卷機制持久保存Docker容器中創建的數據。2 最佳實踐2.1 環境配置2…

kali 切換root權限_Ubuntu 被曝嚴重漏洞:切換系統語言 + 輸入幾行命令,就能獲取 root 權限...

公眾號關注 “GitHubDaily”設為 “星標”,帶你了解技術圈內新鮮事!來自量子位無需系統密碼,就能添加新的 sudo 用戶、獲取 root 權限,事后還能刪除不留痕跡。這是 GitHub 安全研究員 Kevin Backhouse 發現的一個 Ubuntu 系統大漏…

oracle定義變量sql賦值_ORACLE獲取SQL綁定變量值的方法總結

本文總結一下ORACLE數據庫中如何獲取SQL綁定變量值的方法,在SQL優化調優過程中,經常會用到這方面的知識點。在此梳理、總結一下這方面的知識點,方面日后查找、翻閱。方法1:查詢V$SQLV$SQL視圖中的BIND_DATA字段用來存儲綁定變量的…

transition css_Transition 過渡

1:基本概念在一定時間內平滑的過渡,也就是圓滑的以動畫效果改變css的屬性值。它的過渡可以由鼠標點擊、焦點獲取或者失去、被點擊事件或對元素的改變中觸發;不能主動觸發,只能被動觸發。常用的基本屬性有:Transition-d…

jdbc mysql分頁_JDBC【數據庫連接池、DbUtils框架、分頁】

1.數據庫連接池什么是數據庫連接池簡單來說:數據庫連接池就是提供連接的。。。為什么我們要使用數據庫連接池數據庫的連接的建立和關閉是非常消耗資源的頻繁地打開、關閉連接造成系統性能低下編寫連接池編寫連接池需實現java.sql.DataSource接口創建批量的Connectio…

python讀寫文件操作_詳解Python文件讀寫操作

讀文件 打開文件(文件需要存在)#打開文件 f open("data.txt","r") #設置文件對象 print(f)#文件句柄 f.close() #關閉文件 #為了方便,避免忘記close掉這個文件對象,可以用下面這種方式替代 with open(data.t…

keyloadtool_phoenix 利用CsvBulkLoadTool 批量帶入數據并自動創建索引

需要先創建表:CREATE TABLE IF NOT EXISTS population (state CHAR(2) NOT NULL, city VARCHAR NOT NULL, population BIGINTCONSTRAINT my_pk PRIMARY KEY (state, city));在phoenix 目錄下執行hadoop jar /home/phoenix-4.6.0-HBase-1.0-bin/phoenix-4.6.0-HBase-…

【cloud Alibaba】(三)流量控制、熔斷降級(下)——Sentinel

各位小伙伴們大家好,歡迎來到這個小扎扎的spring cloud專欄,在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Sen…

python gui入門的例子_Python GUI編程之Tkinter入門之道

相信剛學習使用Python進行GUI編程的時候,肯定都會聽過Tkinter,畢竟是standard Python interface to the Tk GUI toolkit.用來寫一些小程序還是很方便的。但如果是剛接觸GUI編程的話肯定是被官方文檔搞的有些懵,畢竟還沒弄清楚套路。之前使用過…

@async 默認線程池_SpringBoot 線程池的使用

Java大聯盟幫助萬千Java學習者持續成長關注作者|Musclehengblog.csdn.net/Muscleheng/article/details/81409672前言最近在做訂單模塊,用戶購買服務類產品之后,需要進行預約,預約成功之后分別給商家和用戶發送提醒短信。考慮發短信…

mysql 橫向擴展 中間件_mysql-proxy數據庫中間件架構 | 架構師之路

一、mysql-proxy簡介mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,后端可連接若干個mysql-server。它使用mysql協議,任何使用mysql-client的上游無需修改任何代碼,即可遷移至mysql-proxy上。mysql-…

python selenium對象怎么序列化_python selenium爬取斗魚

不加延遲報錯selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”.//span[class”DyListCover-hot”]”}(Session info: chrome80.0.3987.122)最開始以為是版本問題,不…