演算法愛好者——演算法題:堆化 ? 待解決
給出一個整數陣列,寫一個函式將陣列堆化。堆化操作就是把它變成一個最小堆陣列。對於堆陣列A,A[0] 是堆的根,並對於每個 A[i],A [i * 2 + 1] 是 A[i] 的左兒子並且 A[i * 2 + 2] 是 A[i] 的右兒子。
說明:
什麼是堆?
堆是一種資料結構,它通常有三種方法:push, pop 和 top。其中,“push” 新增新的元素進入堆,“pop” 刪除堆中最小/最大元素,“top” 返回堆中最小/最大元素。
什麼是堆化?
把一個無序整數陣列變成一個堆陣列。如果是最小堆,每個元素 A[i],我們將得到 A[i * 2 + 1] >= A[i] 和 A[i * 2 + 2] >= A[i]
如果有很多種堆化的結果?返回其中任何一個。
格式:
輸入行輸入一個整數陣列,最後輸出經過堆化後的陣列。
樣例輸入
[ 3,2,1,4,5 ]
樣例輸出
[ 1,2,3,4,5 ]
思路:
相關推薦
演算法愛好者——演算法題:堆化 ? 待解決
給出一個整數陣列,寫一個函式將陣列堆化。堆化操作就是把它變成一個最小堆陣列。對於堆陣列A,A[0] 是堆的根,並對於每個 A[i],A [i * 2 + 1] 是 A[i] 的左兒子並且 A[i * 2 + 2] 是 A[i] 的右兒子。 說明: 什麼是堆?
演算法愛好者——演算法題:報數 ? 待解決
報數指的是,按照其中的整數的順序進行報數,然後得到下一個數。如下所示:1,11,21,1211,111221, … 1 讀作 “one 1” -> 11 11 讀作 “two 1s” -> 21 21 讀作 “one 2, then one 1
演算法愛好者——揹包問題升級版 ? 待解決
給出一個都是正整數的陣列 nums,其中沒有重複的數。編寫一個函式從中找出所有的和為 target 的組合個數。其中一個數可以在組合中出現多次。數的順序不同則會被認為是不同的組合。 格式: 第一行輸入一個 整數陣列,第二行輸入一個數字 target ,最後按
演算法愛好者——圖是否是樹 ? 待解決
給出 n 個節點,標號分別從 0 到 n - 1 並且給出一個無向邊的列表 (給出每條邊的兩個頂點),寫一個函式去判斷這張 “無向圖” 是否是一棵樹。 注意事項: 你可以假設我們不會給出重複的邊在邊的列表當中。無向邊 [ 0,1 ] 和 [ 1,0 ]是同一
演算法愛好者——演算法題:最大間距 ? 待解決
給定一個未經排序的陣列,寫一個函式找出其排序表中連續兩個要素的最大間距。如果陣列中的要素少於 2 個,請返回 0。 注意事項: 1、可以假定陣列中的所有要素都是非負整數,且最大不超過 32 位整數。
演算法愛好者——演算法題:四元組 ? 待解決
給定一個包含 n 個數的整數陣列 S,寫一個函式在 S 中找到所有使得和為給定整數 target 的四元組 ( a,b,c,d )。 注意事項: 1、四元組 ( a,b,c,d ) 中,需要滿足 a <= b <= c <= d 2、答案
演算法愛好者——演算法題:交錯正負數 ? 待解決
給出一個含有正整數和負整數的陣列,寫一個函式重新排列成一個正負數交錯的陣列。 注意事項: 不需要保持正整數或者負整數原來的順序。 挑戰 : 原地完成,沒有額外的空間 格式: 輸入行第一行輸入
演算法愛好者——演算法題:亂序字串 ? 待解決
給出一個字串陣列 S,寫一個函式找到其中所有的亂序字串(Anagram)。如果一個字串是亂序字串,那麼它存在一個字母集合相同,但順序不同的字串也在S中。 注意事項: 所有的字串都只包含小寫字母 格式: 輸入行輸入一個字元陣列 S,最後輸出其中的亂序字串。
演算法愛好者——演算法題:最大點集 ? 待解決
P為給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其為“最大的”。求出所有“最大的”點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[ 0, 1e9 ) 內) 如下圖:實心點為
最全BAT演算法面試130題:阿里、百度、騰訊、京東、美團、今日頭條
【百度、阿里、騰訊、京東、美團、今日頭條】等公司都會必考關於演算法的面試題目,今天總結演算法和題目如下: 演算法基礎: 第一:複雜度估算和排序演算法(上) 1) 時間複雜度和空間複雜度 2)認識對數器 3)氣泡排序 4)選擇排序 5)插入排序 6)如何
【模板】LCA Tarjan演算法 (模板題:洛谷P3379)
題目描述 如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。 輸入輸出格式 輸入格式: 第一行包含三個正整數N、M、S,分別表示樹的結點個數、詢問的個數和樹根結點的序號。 接下來N-1行每行包含兩個正整數x、y,表示x結點和y結點之間有一條直接連線的邊
最全BAT演算法面試100題:阿里、百度、騰訊、京東、美團、今日頭條
第一:複雜度估算和排序演算法(上) 1) 時間複雜度和空間複雜度 2)認識對數器 3)氣泡排序 4)選擇排序 5)插入
資料結構—堆的學習:堆化陣列、堆的插入、堆的刪除
原網頁:http://blog.csdn.net/morewindows/article/details/6709644 程式如下: //資料結構堆的建立(堆化陣列)、堆的插入和刪除 #include<stdio.h> #include <stdlib.h
演算法題(二十五):序列化/反序列化二叉樹
題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 分析 結點為空時用“#”代替,反序列化時,遇到“#”輸出null 程式碼 public class SerializeTree { public static void main(String[] arg
演算法題:1的數目
給定一個十進位制正整數N,寫下從1開始,到N的所有正整數,然後數一下其中出現的所有“1”的個數。例如:N =12,我們會寫下1,2,3,4,5,6,7,8,9,10,11,12。這樣1出現的個數為5 java程式碼實現 public class demo1 { public st
演算法題:求N!末尾0的個數和求二進位制數中1的個數
1、給定一個整數,那麼N的階乘N!末尾有多少個0呢? 解題思路:N!=K*10^M,M的值即為N!末尾0的個數。又10^M=(2^M)*(5^M),因為一個數進行質因數分解後,2出現的概率比5大得多。所以只有計算出1到N包含多少個5的因子 public class demo2 {
演算法題:火車站
思路很簡單,如果出棧的元素存在於入站的佇列中但是該元素不是棧頂元素,那麼該出棧佇列不可能存在。 #include <iostream> using namespace std; int main() { int num; int n[100]; ci
演算法題1:《招商銀行信用卡中心》(AI方向第一批)程式設計題:L、R狀態改變
** 題目描述 **題目描述:用‘.’表示諾骨牌站立,‘L’表示該位置以前往左倒,‘R’表示該位置之後往右倒。 **如:…L… 得到的結果即為LLLLL…; …R… 得到的結果是…RRRR; # 如果L、R相遇,則各佔一半,剩餘的為.,如…R…L…得到的結果即為…
一道簡單的演算法題:不借助第三變數來交換兩個變數的值
今天做筆試碰到一道簡單的演算法題:不借助第三變數來交換兩個變數的值,記錄一下。 交換兩個變數的值的普遍做法都是藉助第三變數,這樣具有較高的可讀性。 a = 3 b = 5 t = a a = b b = t 但是,如果記憶體有限,只允許用2個變數呢? 強大的CS當然有辦法解決
演算法與設計經典題:大整數乘法(教材2-4)
給定兩個整數u和v,他們分別有m和n為數字,且m≤n,用通常的乘法求uv的值需要O(mn)時間,可以將u和v均看作是有n位數字的大整數,用本章介紹的分治法,在O(n^(log3))時間內計算uv的值,當m<<n時,此法效率不高。設計演算法在O(nlog2/3)時間計算uv的值 在O(