Java每隔兩個數(shù)刪掉一個數(shù)問題詳解
題目描述
有一個數(shù)組a[N]順序存放0~N-1,要求每隔兩個數(shù)刪掉一個數(shù),到末尾時循環(huán)至開頭繼續(xù)進(jìn)行,求最后一個被刪掉的數(shù)的原始下標(biāo)位置。
以8個數(shù)(N=7)為例:{0,1,2,3,4,5,6,7},
0->1->2(刪除)->3->4->5(刪除)->6->7->0(刪除)
如此循環(huán)直到最后一個數(shù)被刪除。
輸入:
8輸出:
6
以下是本篇文章正文內(nèi)容,下面案例可供參考
解題思路
一看到這個題目,就想到了隊列的約瑟夫環(huán)的問題
此題思路:將兩個數(shù)字取出來放到隊列的后邊,刪掉第三個數(shù)字,如此循環(huán),當(dāng)隊列只剩一個數(shù)字的時候,刪掉它就是最后一個刪除的數(shù)字。
代碼如下
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main1 {
/**
* 每日一題-隔兩個刪數(shù)問題
* 類似于約瑟夫環(huán)問題
* @param args
*/
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
if(scanner.hasNext()) {
int n = scanner.nextInt();
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < n; i++) {
queue.offer(i);//放進(jìn)隊列中
}
while(queue.size()>1){
//將兩個放到隊尾,再刪一個
queue.offer(queue.poll());
queue.offer(queue.poll());
queue.poll();
}
System.out.println(queue.poll());
}
}
}
到此這篇關(guān)于Java每隔兩個數(shù)刪掉一個數(shù)問題詳解的文章就介紹到這了,更多相關(guān)Java每隔兩個數(shù)刪掉一個數(shù) 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)及算法實例:三角數(shù)字
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:三角數(shù)字,本文直接給出實現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06
java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例
這篇文章主要介紹了java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例,需要的朋友可以參考下2014-05-05
Android Studio中ButterKnife插件的安裝與使用詳解
本篇文章主要介紹了Android Studio中ButterKnife插件的安裝與使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
Java基本數(shù)據(jù)類型與封裝類型詳解(int和Integer區(qū)別)
這篇文章主要介紹了Java基本數(shù)據(jù)類型與封裝類型詳解(int和Integer區(qū)別) ,需要的朋友可以參考下2017-02-02

