日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[剑指offer]面试题34:丑数

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [剑指offer]面试题34:丑数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面試題34:丑數
題目:我們把只包含因子2、3和5的數稱作丑數(Ugly Number)。求按從小到大的順序的第1500個丑數。例如6、8都是丑數,但14不是,因為它包含因子7。習慣上我們把1當做第一個丑數。

? 逐個判斷每個整數是不是丑數的解法,直觀但不夠高效

代碼如下:

bool IsUgly(int number) {while (number % 2 == 0)number /= 2;while (number % 3 == 0)number /= 3;while (number % 5 == 0)number /= 5;return (number == 1) ? true : false; }int GetUglyNumber(int index) {if (index <= 0) return 0;int number = 0;int uglyFound = 0;while (uglyFound < index){++number;if (IsUgly(number)){++uglyFound;}}return number; }

? 創建數組保存已經找到的丑數,用空間換時間的解法

前面的算法之所以效率低,很大程度上是因為不管一個數是不是丑數我們對它都要作計算。
接下來我們試著找到一種只要計算丑數的方法,而不在非丑數的整數上花費時間。
根據丑數的定義,丑數應該是另一個丑數乘以2、3或者5的結果(1除外)。因此我們可以創建一個數組,里面的數字是排好序的丑數,每一個丑數都是前面的丑數乘以2、3或者5得到的。
這種思路的關鍵在于怎樣確保數組里面的丑數是排好序的。
假設數組中已經有若干個丑數排好序后存放在數組中,并且把已有最大的丑數記做M,我們接下來分析如何生成下一個丑數。
該丑數肯定是前面某一個丑數乘以2、3或者5的結果,所以我們首先考慮把已有的每個丑數乘以2。
在乘以2的時候,能得到若干個小于或等于M的結果。
由于是按照順序生成的,小于或者等于M肯定已經在數組中了,我們不需再次考慮;還會得到若干個大于M的結果,但我們只需要第一個大于M的結果,因為我們希望丑數是按從小到大的順序生成的,其他更大的結果以后再說。
我們把得到的第一個乘以2后大于M的結果記為M2。同樣,我們把已有的每一個丑數乘以3和5,能得到第一個大于M的結果M3和M5。那么下一個丑數應該是M2、M3和M5這3個數的最小者。
前面分析的時候,提到把已有的每個丑數分別都乘以2、3和5。
事實上這不是必須的,因為已有的丑數是按順序存放在數組中的。
對乘以 2 而言,肯定存在某一個丑數T2,排在它之前的每一個丑數乘以2得到的結果都會小于已有最大的丑數,在它之后的每一個丑數乘以 2 得到的結果都會太大。
我們只需記下這個丑數的位置,同時每次生成新的丑數的時候,去更新這個T2。對乘以3和5而言,也存在著同樣的T3和T5。

有了這些分析,我們就可以寫出如下代碼:

int GetUglyNumber_Solution2(int index) {if (index <= 0) return 0;int *pUglyNumbers = new int[index];pUglyNumbers[0] = 1;int nextUglyIndex = 1;int *pMultiply2 = pUglyNumbers;int *pMultiply3 = pUglyNumbers;int *pMultiply5 = pUglyNumbers;while (nextUglyIndex < index){int min = Min(*pMultiply2 * 2, *pMultiply3 * 3, *pMultiply5 * 5);pUglyNumbers[nextUglyIndex] = min;while (*pMultiply2 * 2 <= pUglyNumbers[nextUglyIndex]) ++pMultiply2;while (*pMultiply3 * 3 <= pUglyNumbers[nextUglyIndex]) ++pMultiply3;while (*pMultiply5 * 5 <= pUglyNumbers[nextUglyIndex]) ++pMultiply5;++nextUglyIndex;}int ugly = pUglyNumbers[nextUglyIndex - 1];delete[] pUglyNumbers;return ugly; }int Min(int number1, int number2, int number3) {int min = (number1 < number2) ? number1 : number2;min = (min < number3) ? min : number3;return min; }

和第一種思路相比,第二種思路不需要在非丑數的整數上做任何計算,因此時間效率有明顯提升。但也需要指出,第二種算法由于需要保存已經生成的丑數,因此需要一個數組,從而增加了空間消耗。如果是求第 1500個丑數,將創建一個能容納1500個丑數的數組,這個數組占內存6KB。而第一種思路沒有這樣的內存開銷??偟膩碚f,第二種思路相當于用較小的空間消耗換取了時間效率的提升。

測試用例:
● 功能測試(輸入2、3、4、5、6等)。
● 特殊輸入測試(邊界值1、無效輸入0)。
● 性能測試(輸入較大的數字,如1500)。
本題考點:
● 考查應聘者對時間復雜度的理解。絕大部分應聘者都能想出第一種思路。在面試官提示還有更快的解法之后,應聘者能否分析出時間效率的瓶頸,并找出解決方案,是能否通過這輪面試的關鍵。
● 考查應聘者的學習能力和溝通能力。丑數對很多人而言是個新概念。有些面試官喜歡在面試的時候定義一個新概念,然后針對這個新概念出面試題。這就要求應聘者聽到不熟悉的概念之后,要有主動積極的態度,大膽向面試官提問,經過幾次思考、提問、再思考的循環,在短時間內理解這個新概念。這個過程就體現了應聘者的學習能力和溝通能力。

總結

以上是生活随笔為你收集整理的[剑指offer]面试题34:丑数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄页网站免费观看 | 一级生活毛片 | 亚洲爽爽网 | 免费人成在线观看网站 | 新红楼梦2005锦江版高清在线观看 | 欧美夜夜操| 依依激情网 | 一区二区播放 | 污视频在线免费 | 在线观看成人网 | 婷婷玖玖 | 制服丝袜av在线播放 | 中国毛片在线观看 | www视频在线观看网站 | 激情五月综合色婷婷一区二区 | 亚洲区小说区图片区qvod | 国产精品欧美在线 | 精品亚洲在线 | 国产精品无码专区av在线播放 | 精品人妻一区二区三区香蕉 | 黄色网址哪里有 | 女人叉开腿让男人桶 | 国产激情一区二区三区在线观看 | 91精品国产成人www | 色香五月 | 亚洲综合自拍偷拍 | 色悠悠久久综合 | 久久99精品波多结衣一区 | 欧美性潮喷xxxxx免费视频看 | 欧美乱淫 | 三级做爰在线观看视频 | 在线不卡欧美 | 亚洲视频免费看 | 一区二区三区四区不卡 | 欧美色999 | 午夜两性视频 | www.99re. | 欧美一级片网址 | 爱爱爱爱网 | 黄色小视频在线观看 | 国产精品第13页 | 丁香花国语版普通话 | av片一区二区 | 性欧美极品另类 | 午夜精品久久久久久久99老熟妇 | 在线 色 | 露出调教羞耻91九色 | 不卡国产视频 | 免费观看黄色网址 | 国产成人在线免费观看视频 | 国产aⅴ片 | 婷婷四月| 久久这里只有精品国产 | 亚洲国产精一区二区三区性色 | 亚洲AV成人午夜无码精品久久 | 日韩一级片在线观看 | 玖玖成人 | 播放灌醉水嫩大学生国内精品 | 国产精品第56页 | 亚洲精品一品 | 天天干夜夜草 | 日本一级淫片色费放 | 亚州男人天堂 | 国产女同视频 | 日韩人妻无码精品久久久不卡 | 91av视频网站 | 蜜桃成人在线观看 | 美女久久久久 | 国产一区二区视频在线免费观看 | 成人xxxx| a级片免费看 | 国产孕妇孕交大片孕 | 国产3p露脸普通话对白 | 日韩女同互慰一区二区 | 人人看人人插 | 欧美女优在线观看 | 日本成人在线视频网站 | 天堂av网手机版 | 国产精品电影一区 | 老鸭窝视频在线观看 | 日本一二三视频 | 欧美日韩精选 | av草逼 | 中文 日韩 欧美 | 日本色区| 国产女无套免费视频 | 欧美在线导航 | 亚洲va视频 | 国产爽爽爽 | 国产在线毛片 | 影音先锋在线看片资源 | 99re这里只有精品在线观看 | 97桃色 | 女人又爽又黄免费女仆 | 免费黄色片网站 | 人人妻人人玩人人澡人人爽 | 韩国无码av片在线观看网站 | 欧洲日韩一区二区三区 | 亚洲综合免费 |