圓圈中最後剩下的數字(Java實現)
本題為劍指offer面試題45
牛客網測試地址:https://www.nowcoder.com/questionTerminal/f78a359491e64a50bce2d89cff857eb6
- 時間限制:1秒空間限制:32768K
每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成一個大圈。然後,他隨機指定一個數m,讓編號為0的小朋友開始報數。每次喊到m-1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮物,並且不再回到圈中,從他的下一個小朋友開始,繼續0...m-1報數....這樣下去....直到剩下最後一個小朋友,可以不用表演,並且拿到牛客名貴的“名偵探柯南”典藏版(名額有限哦!!^_^)。請你試著想下,哪個小朋友會得到這份禮品呢?(注:小朋友的編號是從0到n-1)
package go.jacob.day517;
public class Demo1 {
public static void main(String[] args) {
int n = 5, m = 3;
System.out.println(LastRemaining_Solution_2(n, m));
}
/*
* 方法一:陣列的實現 模擬一個連結串列 時間複雜度為O(mn)
*/
public static int LastRemaining_Solution_1(int n, int m) {
// 考慮異常輸入
if (n < 1 || m < 1)
return -1;
int[] arr = new int[n];
// 陣列初始化
for (int i = 0; i < n; i++)
arr[i] = 0;
// count為所剩元素,index為當前元素下標,step為前進的 步數
int count = n, index = -1, step = 0;
while (count > 0) {
index++;
if (index == n)
index = 0;
if (arr[index] == -1)
continue;
step++;
if (step == m) {
// 把第m個元素設為-1
arr[index] = -1;
step = 0;
count--;
}
}
// 最後一個刪除的元素,就是所求的值
return index;
}
/*
* 推匯出遞推公式,劍指offer有詳細推導過程
* 時間複雜度O(n)
*/
public static int LastRemaining_Solution_2(int n, int m) {
//考慮異常輸入
if (n < 1 || m < 1)
return -1;
int last=0;
for(int i=2;i<=n;i++){
last=(last+m)%i;
}
return last;
}
}
相關文章
- [每日一題] 第四題:圓圈中最後剩下的數字每日一題
- 約瑟夫環(超好的程式碼存檔)--19--約瑟夫環--LeetCode面試題62(圓圈最後剩下的數字)LeetCode面試題
- PAT1044火星數字(java實現)Java
- PAT1048數字加密(java實現)加密Java
- js如何實現數字保留小數點後兩位小數JS
- 【Java基礎教程】用Java實現猜數字小遊戲Java遊戲
- java使用RSA加密方式,實現數字簽名Java加密
- RSA加密解密及數字簽名Java實現加密解密Java
- 面試:Java 實現查詢旋轉陣列的最小數字面試Java陣列
- PAT1019 數字黑洞(java實現)Java
- LeetCode 299 猜數字遊戲 Java實現LeetCode遊戲Java
- 使用java繪圖類Graphics繪製圓圈Java繪圖
- win10 打出帶圈的數字方法 win10帶圈的數字怎麼打出來Win10
- 使用 call/cc 實現計數迴圈
- Android自定義控制元件實現一個帶文字與數字的圓形進度條Android控制元件
- javascript獲取數字中最大的一個簡單介紹JavaScript
- 圓形 ImageView 的實現方法View
- 數字訊號處理:線性卷積、迴圈卷積、圓周卷積計算卷積
- 一句話+兩張圖搞定JDK1.7HashMap,剩下湊字數JDKHashMap
- [UI]實用案例--Shape繪製實用圓圈UI
- CSS3圓形漸隱漸現迴圈出現CSSS3
- 在java中程式設計實現數字簽名系統 (轉)Java程式設計
- Android 圓角、圓形 ImageView 實現AndroidView
- 如何實現炫酷的數字大屏
- js迴圈累加以後,結尾出現很多小數JS
- Java實現後端分頁Java後端
- 用ImageMagick實現數字盲水印
- Java中的增強for迴圈(for each)的實現原理與坑Java
- Android Xfermode 實戰 實現圓形、圓角圖片Android
- js實現的數字四捨五入效果JS
- Asp.Net圖片數字水印的實現ASP.NET
- Java 中實現集合的 keep in order (後續)Java
- UIImageView 實現圓角效果UIView
- Java instanceof 關鍵字是如何實現的?Java
- [題解] 條件變數實現數字的交替輸出變數
- javascript實現獲取指定數字區間的隨機數JavaScript隨機
- 後疫情時代,遠端協同辦公如何實現高效數字資產管理
- Jmeter——迴圈控制器中實現Counter計數器的次數重置JMeter