劍指offer系列之45 圓圈中最後剩下的數字

2021-07-11 04:01:07 字數 620 閱讀 3569

題目描述:用0,1,…,n-1,這n個數字排成乙個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字,求出這個圓圈裡剩下的最後乙個數字。(抽象建模能力)

思路1:經典的解法,用環形鍊錶模擬圓圈,可以建立乙個總共有n個節點的環形鍊錶,然後每次在這個鍊錶中刪除第m個節點。

思路2:把這n個整數做成乙個環,當數到哪個數的時候就把那個數移除,並從下乙個數重新開始數。所已基本思路是:使用陣列模擬環,當當前的元素的值n相等的時候,就回到第乙個位置重新遍歷,每次當前元素的移動都伴隨計步器的增加(每次增加1),當步數等於m的時候,則把當前元素的設為-1,表示已被刪除,並重新設定計步器的值為0,還需要把n的值減小1,表示陣列中的元素被移除了乙個。使用陣列來模擬環。

public

class lastremainingnumber

}return cur;

}}

public

class solution

int last = 0;

for(int i = 2;i <= n;i++)

return last;

}}

劍指offer 45 圓圈中最後剩下的數字

圓圈中最後剩下的數字 0.n 1這n個數字排成乙個圓圈,從數字零開始每次從這個圓圈裡刪除第m個數字,求這個圓圈裡剩下的最後乙個數字 解法1 使用鍊錶表示環,在其中進行結點的刪除,返回剩下的最後乙個結點 public class main public static int findnum int n...

劍指offer46 圓圈中剩下的人

每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...

劍指Offer 面試題45 圓圈中最後剩下的數字

圓圈中最後剩下的數字 0,1,n 1這n個數字排成乙個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡 剩下的最後乙個數字。這是c語言書上的一道題目 設定乙個剪枝陣列,設定乙個迴圈,迴圈出口是只剩乙個元素,剛開始置剩餘元素總數目為n,後面會更新。注意每次當計數器變數走到n時,表明乙個...