[程式設計題] nk:[約瑟夫問題(孩子們的遊戲-圈內最終剩餘的人的編號
阿新 • • 發佈:2020-07-28
[程式設計題] nk:約瑟夫問題(孩子們的遊戲-圈內最終剩餘的人的編號)
輸入輸出
說明:
思路
案例圖解:我們以輸入n=5,m=3為例:
解釋:
(一開始自己錯的地方是在如下,while退出條件的地方,錯寫為dummy.next!=head為退出條件,其實我們本質是要檢測圈中剩下一個節點,也就是dummy的next還是dummy我們就退出!)
Java程式碼
public class Solution { //思路:模擬迴圈連結串列的方法 public static int LastRemaining_Solution(int n, int m) { //極端條件 if (n <= 0) { return -1; } //步驟1:建立一個由n個同學組成的迴圈連結串列 Node head = new Node(0); Node cur = head; for (int i = 1; i < n; i++) { cur.next = new Node(i); cur = cur.next; } //把連結串列的首尾相連 cur.next = head; Node dummy = head; int k = 0; Node pre = new Node(-1); pre.next = dummy; while (dummy.next!=dummy){ //這裡判斷是否是最後一個節點的中止條件是dummy.next!=dummy,而不是dummy.next!=head; if(k++ == m-1){ pre.next = dummy.next; dummy = dummy.next; k=0; }else{ pre = dummy; dummy = dummy.next; } } return dummy.val; } } class Node{ int val; Node next; public Node(int val){ this.val = val; } }