刪數字(華爲筆試題)

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


以 8 個數(n=8)爲例:{0,1,2,3,4,5,6,7},


0->1->2(刪除)->3->4->5(刪除)->6->7->0(刪除),如此循環直到最後一個數被刪除。


java版本的實現:

package cn.cat.test;

import java.util.Iterator;
import java.util.LinkedList;

public class Test30 {

	/** 刪數字(華爲筆試題)
	 * @Description: 
	 * @author gwj
	 * @Created 2017年9月18日 上午11:14:47 
	 * @param args
	 */
	public static void main(String[] args) {
		LinkedList<Integer> list = new LinkedList<Integer>();
		for (int i = 0; i < 8; i++) {
			list.add(i);
		}
		//方法返回的是最後刪除的數值,鏈表數據的下標和存儲的數值是一樣的,故最後刪除的數值就是原來的索引下標。
		int lastVal = remove(list, 2);
		System.out.println("最後個被刪除的索引下標爲: " + lastVal);
	}
	
	static int remove(LinkedList<Integer> list, int intervalIndex) {
		Iterator<Integer> iterator = list.iterator();
		int loopCount = 0;
		int lastVal = -1;
		while (iterator.hasNext()) {
			lastVal = iterator.next();
			if (loopCount != 0 && (loopCount % intervalIndex == 0)) {
				iterator.remove();
			}
			loopCount++;
		}
		if (list.size() > 0 && (list.size() % intervalIndex == 0)) {
			return remove(list, intervalIndex);
		}
		//返回最後個數值。
		return lastVal;
	}

}


發佈了48 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章