演算法 劍指offer

2021-08-26 12:13:49 字數 1529 閱讀 2021

思路:若百位上數字為0,百位上可能出現1的次數由更高位決定;若百位上數字為1,百位上可能出現1的次數不僅受更高位影響還受低位影響;若百位上數字大於1,則百位上出現1的情況僅由更高位決定。

舉例:

個位1出現的次數:round*1+1(每次迴圈1出現一次,0-9迴圈了53次,第54次迴圈為0-4)

十位1出現的次數:round*10 + 10(每次迴圈1出現10次,0-9迴圈了round=5次,第六次迴圈為0-3)

其他高位迴圈同理。

故有:

534 = (個位1出現次數)+(十位1出現次數)+(百位1出現次數)

=(53

*1+1) +(5

*10+10)+(0

*100+100) = 214

530 = (53

*1) +(5

*10+10)+(0

*100+100) = 213

504 = (50

*1+1)+(5

*10) +(0

*100+100) = 201

514 = (51

*1+1)+(5

*10+4+1)+(0

*100+100) = 207

10 = (1

*1) + (0

*10+0+1) = 2

**如下:

public

long countone(int n)

return

count;

}

醜數是只包含因子2、3和5的數,求從小到大的第n個醜數。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

思路一:

醜數判斷:

while (number % 2 == 0) number /= 2;

while (number % 3 == 0) number /= 3;

while (number % 5 == 0) number /= 5;

return

number == 1 ? true : false;

}然後依次輸入每個數就可以獲得n個醜數。但這樣計算太多,即使乙個數不是醜數,也要進行多次計算。

思路二:空間換時間,建立陣列儲存已經找到的醜數。後序的醜數都是min乘2或3或5得到的。

初始化陣列只: ;min = 1,後序 乘2或3或5,之後比較取最小值:2,3,5

public int getuglynumber_solution(int index) 

return arr[index - 1];

}

劍指offer演算法

動態規劃 題目描述 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8...

劍指offer 排序演算法

常用排序演算法自主手寫 1 氣泡排序 時間o n 2 空間o 1 穩定,資料有序效果越好 void bubblesort int a,int n flag 1說明該趟不是全部都有序,需要繼續比較 flag 0說明沒有進行互換,陣列已經有序了,沒有必要繼續比較,直接結束 2 選擇排序 時間o n 2 ...

《劍指Offer》 排序演算法

簡單排序 直接插入 直接選擇 冒泡 o n2 優化排序 希爾排序 堆排序 快速排序 o n log n 歸併排序。要能夠從時間複雜度 空間複雜度比較優缺點。陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸...