1. 程式人生 > >圓圈中最後剩下的數字(Java)

圓圈中最後剩下的數字(Java)

題目:

0, 1,....., n - 1這n個數字排成一個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後一個數字。

程式碼實現:

一:利用陣列實現

public static int getLastNum(int n, int m){
	if(n < 1 || m < 1){ //表示輸入的非法
 		return -1;
	}
	int num[] = new int[n];
	int step = 0; //用來統計步驟
	int i = -1; //用來迴圈使用
	int count = n;
	while(count > 0){
		i++;
		if(i >= n){
			i = 0; //從0重新開始
		}
		if(num[i] == -1){ //跳過被刪除的物件
			continue;
		}
		step++; //記錄已經走過的
		if(step == m){ //找到被刪除的物件
			num[i] = -1;
			step = 0;
			count--;
		}
	}
	return i;
}

二:利用連結串列實現

public static int getLastNum(int n, int m){
	if(m < 1 || n < 1){
		return -1;
	}
		
	ArrayList<Integer> list = new ArrayList<Integer>();
		
	for(int i = 0; i < n; i++){
		list.add(i);
	}
		
	int index = -1;
	while(list.size() > 1){
		index = (index + m) % list.size();
		list.remove(index);
		index --;
	}
	return list.get(0);
}

三:利用規律求解

public static int getLastNum(int n, int m){
	if(n < 1 || m < 1){
		return -1;
	}
	int index = 0;
	for(int i = 2; i < n; i++){
		index = (index + m) % i;
	}
	return index;
}

相關推薦

劍指offer50 陣列重複的數字java

題目 在一個長度為n的數組裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。 例如,如果輸入長度為7的陣列{2,3,1,0,2,5,3},那麼對應的輸出是第一個重複的數字2。 思路1 把

劍指Offer - 孩子們的遊戲(圓圈最後剩下的數)(Java實現)

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

圓圈最後剩下數字Java

題目: 0, 1,....., n - 1這n個數字排成一個圓圈,從數字0開始每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後一個數字。 程式碼實現: 一:利用陣列實現 public s

【LeetCode & 劍指offer刷題】發散思維題3:62 圓圈最後剩下數字約瑟夫環問題

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 62 圓圈中最後剩下的數字(約瑟夫環問題)   題目描述 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為牛客的資深元老

牛客:劍指offer:孩子們的遊戲(圓圈最後剩下的數) Java

轉自:http://blog.csdn.net/crazy__chen/article/details/45115911 題目描述: 解法1:找規律。首先定義最初的n個數字(0,1,…,n-1)中最後剩下的數字是關於n和m的方程為f(n,m)。在這n個數字中,第一個被刪除

牛客46孩子們的遊戲(圓圈最後剩下的數)

ini rem add 小遊戲 bsp -- size public nbsp // 題目描述 // 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為牛客的資深元老,自然也準備了一些小遊戲。 // 其中,有個遊戲是這樣的

劍指offer系列十六翻轉單詞順序列,撲克牌順子,孩子們的遊戲圓圈最後剩下的數

翻轉單詞順序列 題目描述 牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句

劍指offer孩子們的遊戲圓圈最後剩下的數

時間限制:1秒 空間限制:32768K 熱度指數:128897 本題知識點: 模擬 題目描述 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成一個大圈。然後,他隨機指

LastRemaining45(圓圈最後剩下數字約瑟夫問題))

import java.util.LinkedList; /** * @author LemonLin * @Description :LastRemaining45 * @date 2018/

45、圓圈最後剩下數字

pen 重復 color list 操作 port cnblogs int span 思路1:環形鏈表,每次只刪除一個數,都從第0個開始。每次都從鏈表重復遍歷,每刪除一個,走m步,共n遍 時間O(nm),空間o(n) import java.util.*; publ

【劍指offer】圓圈最後剩下數字,C++實現

一行 AC 個人 ron namespace itl i++ float color 原創博文,轉載請註明出處! # 題目 # 思路 本題即為典型的約瑟夫問題,通過遞推公式解決。 第一行表示每個人的下標,現在要從11個人中刪除報數為3的人,從圖

【劍指offer】62、圓圈最後剩下數字

== str rem 過程 開始 continue 最後一個元素 last main 題目 0~n-1這n個數字排成一個圓圈,從0開始,每次刪除第m個數字,求出圓圈裏剩下的最後一個數字 思路 直接用數組模擬圓圈,模擬刪除的過程 class Solution { publi

劍指offer第62:圓圈最後剩下數字

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

劍指offer28 陣列出現次數超過一半的數字java

題目 中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 思路 思路一(程式碼略) 先排序,然後找中位數 思路二

《劍指offer》系列 數字在排序陣列出現的次數Java

連結 牛客:數字在排序陣列中出現的次數 題目描述 統計一個數字在排序陣列中出現的次數。 思路 我們需要求k出現的次數,我們可以直接遍歷求出答案,這樣的時間複雜度是O(n),有沒有更好的方法呢?我們找到一個數最快的是O(log n) 那麼我們可以先找到這個數字第一次出現

《劍指offer》系列 陣列出現次數超過一半的數字Java

連結 牛客: 陣列中出現次數超過一半的數字 題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 思路

《劍指offer》系列 陣列只出現一次的數字Java

連結 牛客:陣列中只出現一次的數字 題目描述 一個整型數組裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。 思路 參考:陣列中只出現一次的數 我們從頭到位對陣列做異或運算,得到的最終結果應該是兩個不同數字做異或運算後的值。因為兩個數字

找出陣列只出現了一次的數字Java

找出陣列中只出現了一次的數字題目題目分析方法1方法2方法3程式碼實現總結 題目 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個 元素均出現兩次。找出那個只出現了一次的元素。 示例 示例1:輸入:[2,2,1] 輸出:1 示例2:輸入:[4,1,2

程式設計師面試一百題-14-圓圈最後剩下數字

1-題目 : n 個數字(0,1,…,n-1)形成一個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字;當一個數字刪除後,從被刪除數字的下一個繼續刪除第m 個數字;求出在這個圓圈中剩下的最後一個數字。 2-思路 : 2.1 : 環形列表的思路這裡不再贅述; 2.2 : 嘗試用數學中

劍指offer:陣列只出現一次的數字java

題目:一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。請些程式找出這兩個只出現一次的數字。要求時間複雜度為O(n),空間複雜度為O(1).     如輸入陣列{2,4,3,6,3,2,5,5},因為只有4,6這兩個數字只出現一次,其他數字都出現了兩次,所以輸出4