劍指offer 面試題45 把陣列排成最小的數

2021-09-11 06:19:13 字數 720 閱讀 9243

面試題–【劍指offer】 題目解答

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323

首先我們能想到最直接的辦法就是對給出的數字進行全排列,然後依次比較,選出最小的數。但是時間複雜度太大,不會通過。

乙個更簡單的辦法,用字串來表示整數,進行兩兩拼接操作,然後取拼接結果較小的順序,按照這個順序來放置數字就是題目要求的。

如:a=2 b =21 拼接後ab = 221, ba=212 因為212小於221,所以212是我們要的順序,原來的數字排序後變成21,2。

實際上我們的思路就是新建立乙個排序的規則,然後遍歷陣列中的元素。

優點:用字串表示整數很好的避開了大數問題。

/*

對vector容器內的資料進行排序,按照 將a和b轉為string後

若 a+bclass solution

string printminnumber

(vector<

int> numbers)

return answer;}}

;

本題目不僅讓我們再一次的熟悉了整數字串之間的相互轉化上,還提供了一種新的排序規則(修改sort的第三個引數),這種改變極大的便利了我們的計算,有關更詳細的sort函式用法,可以參考

劍指Offer 面試題45 把陣列排成最小的數

面試題45 把陣列排成最小的數 題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這3個數字能排成的最小數字321323。include include include include include include using ...

劍指 面試題45 把陣列排成最小的數

題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。0 nums.length 100 思路 1 自定義排序規則comp 然後呼叫內建排序函式。2 將int轉換成字串,再執行字串拼接操作,最後比較它們只用根據字串大小的比較規則比較即可,因為ab和ba位數...

《劍指offer》陣列相關面試題

在乙個長度為n的陣列裡所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複,也不知道重複了幾次,請找出陣列中任意乙個重複的數字。例如,長度為7的陣列,那麼對應的輸出應該是重複的數字2或者3.思路 重排這個陣列,從頭到尾依次掃瞄這個陣列中的每個數字。掃到下標為i的數字m時 首先...