删数字(华为笔试题)

来源:互联网 发布:淘宝怎么看是不是假货 编辑:程序博客网 时间:2024/05/21 22:36

题目:有一个整型数组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;}}