文章目錄
- 😉毛遂自薦
- ?題目
- 🔥解題思路
- 🌈代碼實作
- 💖最后
Code皮皮蝦 一個沙雕而又有趣的憨憨少年,和大多數小伙伴們一樣喜歡聽歌、游戲,當然除此之外還有寫作的興趣,emm…,日子還很長,讓我們一起加油努力叭🌈
點我,直達底部有粉絲專享福利!!!
😉毛遂自薦
毛遂自薦一下,給大家推薦一下自己的專欄😁,歡迎小伙伴們收藏關注😊
大廠面試題專欄
Java專欄
爬蟲專欄
更多專欄盡在主頁,點我😁!!!

?題目
?力扣鏈接

🔥解題思路
題目大概掃一眼就應該明白,就是要回傳需要補充粉筆的索引下標
對于此題,主要考慮陣列元素總和sum和k三種情況
sum == ksum > ksum < k
1. 對于第一個條件sum == k好說,直接return 0即可,因為在這種情況下,需要補充的下標永遠為0
2. 對于第二個條件sum > k也好說,在我們計算sum的程序中,就可以判斷sum 是否大于 k,如果條件滿足,那么直接return 當前索引下標,因為k不夠了,需要補充
3. 對于第三個條件sum < k,我們肯定不能傻乎乎的😂去一邊又一遍遍歷陣列減少k,最終判斷是哪個索引下標

題目給出的資料量是非常大的,如果一遍遍的遍歷肯定超時,那么我們可以通過k % sum來得到剩下的值,舉個栗子:
sum = 10,k = 25,如果一遍遍的遍歷,那么我們需要先遍歷兩次得到k = 5后,在進行第三次遍歷才可得到需要回傳的下標
那么采用取模方法,直接tmp = k % sum,tmp = 25 % 10,tmp = 5,那么我們只需要遍歷一次就可得到正確結果,極大的降低了時間復雜度
🌈代碼實作
class Solution {
public int chalkReplacer(int[] chalk, int k) {
int sum = 0,len = chalk.length;
//在計算總和的時候,需要判斷,sum是否已經大于了k,如果已經大于了k,那么也沒必要繼續算下去,直接return當前索引下標即可
//因為此時已經需要補充k了
for (int i = 0;i < len;i++) {
sum += chalk[i];
if (sum > k) return i;
}
//如果相等直接回傳0
if (sum == k) return 0;
int tmp = k % sum;
//一次遍歷
for (int i = 0; i < len; i++) {
tmp -= chalk[i];
//如果tmp == 0,如果下一個索引才是需要補充的索引
//如果tmp < 0,那么當前索引就是需要補充的索引
if (tmp == 0) return i + 1;
else if (tmp < 0) return i;
}
return 0;
}
}

💖最后
我是 Code皮皮蝦,一個熱愛分享知識的 皮皮蝦愛好者,未來的日子里會不斷更新出對大家有益的博文,期待大家的關注!!!
創作不易,如果這篇博文對各位有幫助,希望各位小伙伴可以一鍵三連哦!,感謝支持,我們下次再見~~~
粉絲福利👇🏻👇🏻👇🏻
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299179.html
標籤:java
