Java每隔兩個數刪掉一個數問題詳解

題目描述

有一個數組a[N]順序存放0~N-1,要求每隔兩個數刪掉一個數,到末尾時循環至開頭繼續進行,求最後一個被刪掉的數的原始下標位置。

以8個數(N=7)為例:{0,1,2,3,4,5,6,7},
0->1->2(刪除)->3->4->5(刪除)->6->7->0(刪除)
如此循環直到最後一個數被刪除。

輸入:
8

輸出:
6

以下是本篇文章正文內容,下面案例可供參考

解題思路

一看到這個題目,就想到瞭隊列的約瑟夫環的問題
此題思路:將兩個數字取出來放到隊列的後邊,刪掉第三個數字,如此循環,當隊列隻剩一個數字的時候,刪掉它就是最後一個刪除的數字。

代碼如下

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main1 {
    /**
     * 每日一題-隔兩個刪數問題
     * 類似於約瑟夫環問題
     * @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);//放進隊列中
            }
            while(queue.size()>1){
            //將兩個放到隊尾,再刪一個
                queue.offer(queue.poll());
                queue.offer(queue.poll());
                queue.poll();
            }
            System.out.println(queue.poll());
        }
    }
}

 到此這篇關於Java每隔兩個數刪掉一個數問題詳解的文章就介紹到這瞭,更多相關Java每隔兩個數刪掉一個數 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!