給定乙個數x,他的兄弟數y定義為:是由x中的數字組合而成。而且y是大於x的數中最小的。
比如,38276的兄弟數字為38627。給定x,求y。
分析:這個題目當然有暴力的方法。列出全部的排列組合。然後然後找到大於x中,最小的y。
即。找到兄弟數字。
那有沒有更好的方法呢?不想對全部情況進行窮舉。就要想辦法,盡可能縮小要處理的範圍。一般的思路,從右邊開始,兩兩交換,檢視能否夠找到y,最開始考慮兩位,進而考慮三位,依次類推,那麼怎樣確定,要考慮多少位呢?如果x的形式例如以下:x1x2x3...xky1y2y3y4。而且當中y1>y2>y3>y4,xk以下以乙個詳細樣例來說明上述過程:34
7226
41首先找到,從右邊開始的遞增的、盡可能長的數字,這裡是641。34
722(6
41)則。選取前一位數字2。進行交換。641中。大於2的最小的值是4,則作例如以下交換:34
724(6
21)為了得到最小值,對621,從小到大進行排序。得到34
7241
26則。y為34724126.對於負數的情況類似,僅僅是從後向前找第乙個遞增的位置。詳細**例如以下:
int brotheripositivenum(int num)return res;
}int brotherinegativenum(int num)
return res;
}int brothernum(int num)
待字閨中之巧妙排序分析
排序只有1,2,3三個元素的陣列,不能統計1,2,3的個數。分析 這個題目,儘管也是排序,但卻不能使用快速排序的方法。只有三個元素,如果時間複雜度仍舊是o nlogn 顯然不是最好的。那就可以使用線性的排序演算法,例如計數排序,可是題目中要求,不能夠對1,2,3進行統計個數。那該如何處理呢?請大家看...
待字閨中之巧妙排序分析
排序僅僅有1。2,3三個元素的陣列。不能統計1,2。3的個數。分析 這個題目,雖然也是排序,但卻不能使用高速排序的方法。僅僅有三個元素,假設時間複雜度仍舊是o nlogn 顯然不是最好的。那就行使用線性的排序演算法,比如計數排序。但是題目中要求,不可以對1,2,3進行統計個數。那該怎樣處理呢?請大家...
待字閨中之樹的高度分析
有乙個棵樹,不一定是二叉樹,有n個節點,編號為0到n 1。有乙個陣列a,陣列的索引為0到n 1,陣列的值a i 表示節點i的父節點的id,根節點的父節點id為 1。給定陣列a,求得樹的高度。分析這個題目我們首先把陣列寫出來,然後進一步分析,就很明了了,如下例子 333 1201234根據題意 乙個很...