• 循环删除数组中元素的问题


    一个整形数组,里面存的都是正整数,例如2,1,3,4,5,7,现在要求每隔m个数删除一个数,进行到数组尾部后,再循环至数组首部,如此反复,直到数组的所有数删除为止,求最后一个被删除的数在数组中的原始下标。

    例如:对于数组 arr = [2,1,3,4,5,7],若 m = 2时,整个删除过程(把删除的标记为-1)如下:

    元素数组:[2,1,3,4,5,7]

    第一次:[2, 1, 3, -1, 5, 7]

    第二次:[-1, 1, 3, -1, 5, 7]

    第三次:[-1, 1, 3, -1, -1, 7]

    第四次:[-1, 1, -1, -1, -1, 7]

    第五次:[-1, 1, -1, -1, -1, -1]

    第六次:[-1, -1, -1, -1, -1, -1]

    因此,最后一个被被删除的数为1,其在数组中的下标为1.

    具体的代码,实现如下(Java版):

     1 import java.util.Scanner;
     2 /**
     3  * 数组数的循环删除问题,一个数组,例如,2,1,3,4,5,7,每隔2个数删除,删除到尾部再循环到首部,如此反复进行,直到删除最后一个数
     4  * 输出最后一个被删除数的下标,为1
     5  * @author JiaJoa
     6  * 输入包括3行,第一个行n为数组的长度,第二行为n个正整数,以空格隔开,第三行为间隔m
     7  * 例如:
     8  * 6
     9  * 2 1 3 4 5 7
    10  * 2
    11  * 输出:1
    12  */
    13 public class RecurrNumber {
    14 
    15     public static void main(String[] args) {
    16         Scanner in = new Scanner(System.in);
    17         int n = in.nextInt();  //长度为n的数组
    18         int[] arr = new int[n];
    19         for(int i=0;i<n;i++){
    20             arr[i] = in.nextInt();
    21         }
    22         
    23         int m = in.nextInt();  //每间隔为m删除一个数
    24         int index = getResult(arr,m);
    25         System.out.println(index);
    26         in.close();
    27     }
    28     
    29     public static int getResult(int[] arr,int m){
    30         int len = arr.length;
    31         int start = 1;
    32         int count=0;
    33         int flag = m;
    34         while(flag>0){
    35             if(count==len)
    36                 break;
    37             if(start>=len){
    38                 start = start%len;
    39             }
    40             if(arr[start]!=-1){
    41                 flag--;
    42             }
    43             start++;
    44             if(flag==0){
    45                 if(start>=len){
    46                     start = start%len;
    47                 }
    48                 while(arr[start]==-1){
    49                     start++;
    50                     if(start>=len){
    51                         start = start%len;
    52                     }
    53                 }
    54                 arr[start]=-1;
    55                 count++;
    56                 flag=m;
    57             }
    58         }
    59         return start;
    60     }
    61 }
  • 相关阅读:
    4-结对开发地铁
    第五周学习进度博客
    mybatis的使用
    从写json作业谈起
    工作中慢慢明白的道理
    从参与公司开发到离职
    这也是风云变幻的年代
    学习的习惯和方法跟得上时代要求
    公司中springcloud项目遇到的问题
    实习生在公司的成长
  • 原文地址:https://www.cnblogs.com/JiaJoa/p/7735696.html
Copyright © 2020-2023  润新知