18個簡單演算法題問答
1)請簡單解釋演算法是什麼?
演算法是一個定義良好的計算過程,它將一些值作為輸入併產生相應的輸出值。簡單來說,它是將輸入轉換為輸出的一系列計算步驟。
2)解釋什麼是快速排序演算法?
快速排序演算法能夠快速排序列表或查詢。它基於分割交換排序的原則,這種型別的算法佔用空間較小,它將待排序列表分為三個主要部分:
小於Pivot的元素
樞軸元素Pivot(選定的比較值)
大於Pivot的元素
3)解釋演算法的時間複雜度?
演算法的時間複雜度表示程式執行完成所需的總時間,它通常用大O表示法來表示。
4)請問用於時間複雜度的符號型別是什麼?
用於時間複雜度的符號型別包括:
Big Oh:它表示小於或等於目標多項式
Big Omega:它表示大於或等於目標多項式
Big Theta:它表示與目標多項式相等
Little Oh:它表示小於目標多項式
Little Omega:它表示大於目標多項式
5)解釋二分法檢索如何工作?
在二分法檢索中,我們先確定陣列的中間位置,然後將要查詢的值與陣列中間位置的值進行比較,若小於陣列中間值,則要查詢的值應位於該中間值之前,依此類推,不斷縮小查詢範圍,直至得到最終結果。
6)解釋是否可以使用二分法檢索連結串列?
由於隨機訪問在連結串列中是不可接受的,所以不可能到達O(1)時間的中間元素。因此,對於連結串列來說,二分法檢索是不可以的(對順序連結串列或排序後的連結串列是可以用的)。
7)解釋什麼是堆排序?
堆排序可以看成是選擇排序的改進,它可以定義為基於比較的排序演算法。它將其輸入劃分為未排序和排序的區域,通過不斷消除最小元素並將其移動到排序區域來收縮未排序區域。
8)說明什麼是Skip list?
Skip list資料結構化的方法,它允許演算法在符號表或字典中搜索、刪除和插入元素。在Skip list中,每個元素由一個節點表示。搜尋函式返回與key相關的值的內容。插入操作將指定的鍵與新值相關聯,刪除操作可刪除指定的鍵。
9)解釋插入排序演算法的空間複雜度是多少?
插入排序是一種就地排序演算法,這意味著它不需要額外的或僅需要少量的儲存空間。對於插入排序,它只需要將單個列表元素儲存在初始資料的外側,從而使空間複雜度為O(1)。
10)解釋什麼是“雜湊演算法”,它們用於什麼?
“雜湊演算法”是一個雜湊函式,它使用任意長度的字串,並將其減少為唯一的固定長度字串。它用於密碼有效性、訊息和資料完整性以及許多其他加密系統。
11)解釋如何查詢連結串列是否有迴圈?
要知道連結串列是否有迴圈,我們將採用兩個指標的方法。如果保留兩個指標,並且在處理兩個節點之後增加一個指標,並且在處理每個節點之後,遇到指標指向同一個節點的情況,這隻有在連結串列有迴圈時才會發生。
12)解釋加密演算法的工作原理?
加密是將明文轉換為稱為“密文”的密碼格式的過程。要轉換文字,演算法使用一系列被稱為“鍵”的位來進行計算。金鑰越大,建立密文的潛在模式數越多。大多數加密演算法使用長度約為64到128位的固定輸入塊,而有些則使用流方法。
13)列出一些常用的加密演算法?
一些常用的加密演算法是:
3-way
Blowfish
CAST
CMEA
GOST
DES 和Triple DES
IDEA
LOKI等等
14)解釋一個演算法的最佳情況和最壞情況之間有什麼區別?
·最佳情況:演算法的最佳情況解釋為演算法執行最佳的資料排列。例如,我們進行二分法檢索,如果目標值位於正在搜尋的資料中心,則這就是最佳情況,最佳情況時間複雜度為0。
·最差情況:給定演算法的最差輸入參考。例如快速排序,如果選擇關鍵值的子列表的最大或最小元素,則會導致最差情況出現,這將導致時間複雜度快速退化到O(n2)。
15)解釋什麼是基數排序演算法?
基數排序又稱“桶子法”,是通過比較數字將其分配到不同的“桶裡”來排序元素的。它是線性排序演算法之一。
16)解釋什麼是遞迴演算法?
遞迴演算法是一個解決複雜問題的方法,將問題分解成較小的子問題,直到分解的足夠小,可以輕鬆解決問題為止。通常,它涉及一個呼叫自身的函式。
17)提到遞迴演算法的三個定律是什麼?
所有遞迴演算法必須遵循三個規律
遞迴演算法必須有一個基點
遞迴演算法必須有一個趨向基點的狀態變化過程
遞迴演算法必須自我呼叫
18)解釋什麼是氣泡排序演算法?
氣泡排序演算法也稱為下沉排序。在這種型別的排序中,要排序的列表的相鄰元素之間互相比較。如果它們按順序排列錯誤,將交換值並以正確的順序排列,直到最終結果“浮”出水面。
相關推薦
18個簡單演算法題問答
1)請簡單解釋演算法是什麼? 演算法是一個定義良好的計算過程,它將一些值作為輸入併產生相應的輸出值。簡單來說,它是將輸入轉換為輸出的一系列計算步驟。 2)解釋什麼是快速排序演算法? 快速排序演算法能夠快速排序列表或查詢。它基於分割交換排序的原則,這
資料結構之單鏈表的幾個簡單演算法題
單鏈表作為最基本的資料結構,在程式設計中有著非常重要的運用。最近自己閒下來,正在整理資料結構和演算法的一些程式題,現將自己的程式碼貼出來與大家分享。如有不對之處,請大家指正。(好吧 ,這麼簡單的題目應該不會有錯,都測試過了。況且說的好像很多人看我部落格一樣。
簡單演算法題-兩個數相加
簡單演算法題-兩個數相加 題目的大意大概是這個樣子的: 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因
15道簡單演算法題
最近在公司裡基本處於打醬油的狀態,工作正在交接中。沒事又做起了演算法題目。好久沒怎麼寫演算法題了,感覺手氣還不錯,經常能一次就寫對(編譯通過,得到想要的結果,沒怎麼測試),可能是因為這些題目之前看過或是寫過,或許就是自己進步了一點。這15道大部分來自《劍指Offer》,作者的部落格之前看過幾次,感覺寫得很好,
考基本功的 10 個簡單程式設計題
一、給一個數 N,判定這個數是否是素數。 1、先讓面試者說素數的定義,如果不知道可以提示素數的定義 2、最差的面試者,會沒有思路,這是很可怕的,大學第一學期學完,應該學會這個題 3、一般的面試者,能比較費勁地寫出正確的程式,但是可能存在邊界、標記等問題。 4、寫出程式出來,
幾個面試演算法題,附原始碼
昨天下午面試了一家,最後有道演算法題,當時沒想起來,就拍了張照,回來慢慢想,也算沒白去。原題 : 有N個人圍成一圈,順序排號。從第一個人開始報數(1到3),凡是報到3的人推出圈子,問最後留下的是原來第幾號的那位?先說下當時的思路,當時以為留下的人是有規律的,就想用數學歸納法
考出面試者基本功的 10 個簡單程式設計題
昨天在朋友圈感慨了一下被面試的小朋友,會拉控制元件,會做應用,但是基本功差,還要價高,結果引來了 60多條評論。朋友們大都是感慨行業浮躁、人傻錢多,也有朋友問到,什麼樣的程式設計題能考察程式設計師的基本功呢?本文就奉上 10個筆者常用來考察面試者的程式設計題。由於我們不是大公
面試中最容易被問到的18個演算法題(附答案!)
演算法是比較複雜又基礎的學科,每個學程式設計的人都會學習大量的演算法。而根據統計,以下這18個問題是面試中最容易遇到的,本文給出了一些基本答案,供演算法方向工程師或對此感興趣的程式設計師參考。 1)請簡單解釋演算法是什麼? 演算法是一個定義良好的計算過程,它將一些值作為輸入併產生相應的
一道簡單的演算法題:不借助第三變數來交換兩個變數的值
今天做筆試碰到一道簡單的演算法題:不借助第三變數來交換兩個變數的值,記錄一下。 交換兩個變數的值的普遍做法都是藉助第三變數,這樣具有較高的可讀性。 a = 3 b = 5 t = a a = b b = t 但是,如果記憶體有限,只允許用2個變數呢? 強大的CS當然有辦法解決
LeetCode演算法題21:合併兩個有序連結串列解析
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4 因為之前做過兩數之和的那道題,
資料結構演算法題/找出兩個連結串列的第一個公共節點
分析:如果兩個單向連結串列有公共的結點,也就是說兩個連結串列從某一結點開始,它們的m_pNext都指向同一個結點。但由於是單向連結串列的結點,每個結點只有一個m_pNext,因此從第一個公共結點開始,之後它們所有結點都是重合的,不可能再出現分叉。所以,兩個有公共結點而部分重合的連結串列,拓撲形狀看起
資料結構演算法題/兩個字串的最長公共子序列
一,問題描述 給定兩個字串,求解這兩個字串的最長公共子序列(Longest Common Sequence)。比如字串1:BDCABA;字串2:ABCBDAB 則這兩個字串的最長公共子序列長度為4,最長公共子序列是:BCBA 二,演算法求解 這是一個動態規劃的題目。
資料結構演算法題/合併兩個有序陣列
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2&n
資料結構演算法題/兩個有序陣列的中位數
有三種方法,時間複雜度分別是O(m+n) ,O(k),O(log(m+n)) 注意點: 判斷合併後的陣列的元素個數是奇數還是偶數 如果是奇數取中間值;如果是偶數取中間2個數的平均值。 兩種求中位數的方法: (1)方法1,判斷奇數個還是偶數個 if (lengthall % 2 == 0)
關於Fibonacci數列幾個簡單的演算法
無窮數列1,1,2,3,5,8,13,21,34,55,……,稱為Fibonacci數列。它可以遞迴地定義為: 第n個Fibonacci數可遞迴地計算如下: int fibonacci(int n) {
LeetCode演算法題——兩個排序陣列的中位數
4.給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2 。 請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 O(log (m+n)) 。 你可以假設 nums1 和 nums2
【leetcode】python演算法題庫——簡單難度【2】
66. 加一 給定一個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。 最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 示例 1: 輸入: [1,2,3] 輸出: [1,2,4] 解
【leetcode】python演算法題庫——簡單難度【1】
1. 兩數之和 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2
【leetcode】python演算法題庫——簡單難度【3】
118. 楊輝三角 給定一個非負整數 numRows,生成楊輝三角的前 numRows 行。 在楊輝三角中,每個數是它左上方和右上方的數的和。 示例: 輸入: 5 輸出: [ [1], [1,1], [1,2,1]
資料結構演算法題/求陣列中大小最接近的兩個元素的差
考慮下面這個演算法,它求的是數值陣列中大小最接近的兩個元素的差。 可對比看下求陣列中兩個元素差的最大值https://blog.csdn.net/fkyyly/article/details/83930343 演算法: MinDistance(A[0..n-1])