相伴一生;及構造最大數分析
今日面試題:相伴一生
給定一個陣列,陣列中只包含0和1。請找到一個最長的子序列,其中0和1的數量是相同的。
例1:10101010 結果就是其本身。
例2:1101000 結果是110100
請大家展開自己的思路。
=========================
構造最大數分析
原題
給定只包含正數的陣列,給出一個方法,將陣列中的數拼接起來,得到的數,是最大的。 例如: [4, 94, 9, 14, 1] 拼接之後,所得最大數為:9944141
分析
初看這個題目,肯定是要排序的。按照從左到右的第一個位置的數字,從大到小進行排序。如題目中的例子,結果是:
94 | 9 | 4 | 14 | 1 |
直接拼接為9494141顯然不是最大的。那很自然的想法,就是考慮從左到右第二位的數字。考慮9和94的第二個數字,9沒有第二個數字如何處理?這裡有一個小技巧,就是用9補位。為什麼用9呢?994>949,因為4<9,所以,拼接的方式 9 + “” + 94. 為了方便我們排序,所以用9進行了補位。
再看一個例子:56,54,5。第一次排序結果為:
56 | 54 | 5 |
第二次呢?
56 | 55 | 54 |
此時要注意,第二55,是由5補位而來的。
再看一個複雜一點的例子,包含了:1位數,2位數,3位數:96 9 95 556 56 55 5 554 54 3 2 1
第一次排序:
96 | 9 | 95 | 556 | 56 | 55 | 5 | 554 | 54 | 3 | 2 | 1 |
96 | 9 | 95 | 556 | 56 | 55 | 5 | 554 | 54 | 3 | 2 | 1 |
第二次排序:
9 | 96 | 95 | 56 | 556 | 55 | 5 | 554 | 54 | 3 | 2 | 1 |
99 | 96 | 95 | 56 | 556 | 55 | 55 | 554 | 54 | 3 | 2 | 1 |
上面一行,是原始數字,下面一行,經過補位了。
第三次排序
9 | 96 | 95 | 56 | 556 | 55 | 5 | 554 | 54 | 3 | 2 | 1 |
99 | 96 | 95 | 565 | 556 | 555 | 555 | 554 | 545 | 3 | 2 | 1 |
第四次排序
9 | 96 | 95 | 56 | 556 | 55 | 5 | 554 | 54 | 3 | 2 | 1 |
99 | 96 | 95 | 565 | 556 | 555 | 555 | 554 | 545 | 3 | 2 | 1 |
處理最後三個個位數即可。則最終的結果是: 996955655655554554321
上面的演算法,排序處理自左向右第一位,然後處理第二位,一次類推,如果某一組內,即第一個數字相同的一組,長度不同時,採用第一位進行補位。
一個巧妙的方法
我們在上面的方法中,相當於,比較兩個數字的時候,把兩個數字拆開,逐位進行比較。那我們接下來,就是將這兩個數字,作為一個整體,進行比較。然後一次排序,就得到了結果。給定例子:5,54,56
比較5和54,實際上就是比較545和554哪個大
比較5和56,實際上就是比較556和565哪個大
比較54和56,實際上就是比較5456和5654哪個大
那我們對快排程式做一下變化,當兩個數字a和b進行比較時,比較的是ab和ba兩個數字的大小即可。只是比較發生了變化,剩下的和快排都是一樣的。
相比較而言,後面這種方法,更簡單易懂一些,而且,看上去要美很多,但是確不容易那麼直接的想到。我們在平時積累的過程中,就要嘗試多多的方法,即使看起來不那麼美的方法,這些思路的開拓,會幫助我們舉一反三,幫助我們在遇到新的題目的時候,遊刃有餘。
【分析完畢】
本文來自微信:待字閨中,2013-07-20釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 巧妙排序;及相伴一生分析排序
- 構造最大數;及熟悉的陌生人分析
- 找最大數;及序列生成分析
- 合併總數;及相差最大分析
- 周長最長;及找到最大數分析
- 線性時間構造最大堆
- 相差最大;及逆序分析
- Google賽馬;及最大矩形分析Go
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 分詞問題;及最大乘積分析分詞
- 【lombok】@NoArgsConstructor/@RequirArgsConstructor/@AllArgsConstructor - 生成無參構造器,指定引數構造器或包含所有引數的構造器LombokStructUI
- 突破!中小製造企業數字化轉型困境分析及對策
- c語言 構造素數表C語言
- InnoDB鎖結構個數最大限制
- 排序--最大堆構造和堆排序(單步檢視過程)排序
- 最大乘積;及最新版本分析
- Shadow DOM 內部構造及如何構建獨立元件元件
- 讓咖啡與程式碼相伴
- Java--構造器和構造方法Java構造方法
- 格點數目;及兄弟數字分析
- 缺失的數字;及找數字分析
- 數對數目;及LIS問題分析
- effective java 第2條:遇到多個構造器引數時要考慮用構造器Java
- 2466. 統計構造好字串的方案數字串
- C++:String物件的構造及深拷貝C++物件
- 構造方法構造方法
- 構造器
- 讓工作與(vue)音樂相伴Vue
- 找數字續;及缺失的數字分析
- 找數字;及最長等差數列分析
- k個最小和;及數對數目分析
- 如何使用 Druid 和 Kafka 構造 Kappa 架構完成流量分析UIKafkaAPP架構
- [原創]CVE-2013-2251 Apache Struts 2 高危漏洞重現構造及漏洞原理分析Apache
- laravel中的$request物件構造及請求生命週期Laravel物件
- Codeforces 715A. Plus and Square Root[數學構造]
- UOJ Round #15 [構造 | 計數 | 異或雜湊 kmp]KMP
- 構造點,線結構
- 【機器學習】數值分析01——緒論及誤差分析機器學習