华为2018年4月实习笔试题2 数字跳跃

Posted ncznx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为2018年4月实习笔试题2 数字跳跃相关的知识,希望对你有一定的参考价值。


第一行表示有多少个数n
第二行开始依次是1到n个数,一个数一行
输出描述:
输出一行,表示最少跳跃的次数。
示例1
输入
7
2
3
2
1
2
1
5
输出
3
 说明
 7表示接下来要输入7个正整数,从2开始。数字本身代表可以跳跃的最大步长,此时有2种跳法,为2-2-2-5和2-3-2-5都为3步

  1 import java.util.ArrayList;
  2 import java.util.Scanner;
  3 
  4 
  5 public class test2 {
  6 
  7     public static void main(String[] args) {
  8         // TODO Auto-generated method stub
  9         // 第一行表示有多少个数n
 10         // 第二行开始依次是1到n个数,一个数一行
 11         // 输出描述:
 12         // 输出一行,表示最少跳跃的次数。
 13         // 示例1
 14         // 输入
 15         // 7
 16         // 2
 17         // 3
 18         // 2
 19         // 1
 20         // 2
 21         // 1
 22         // 5
 23         // 输出
 24         // 3
 25         // 说明
 26         // 7表示接下来要输入7个正整数,从2开始。数字本身代表可以跳跃的最大步长,此时有2种跳法,为2-2-2-5和2-3-2-5都为3步
 27         Scanner sc = new Scanner(System.in);
 28         int n0 = sc.nextInt();
 29         
 30         ArrayList<Integer> arr = new ArrayList<Integer>();
 31   
 32         int i = 0;
 33         if (n0 ==0) {
 34             System.out.println(0);
 35         } else {
 36             while (i < n0) {
 37                 int next = sc.nextInt();
 38           
 39                 arr.add(next);
 40                 i++;
 41             }
 42         }
 43         
 49         int index = 0;
 50         int n = 0;
 51        
 70         if (n0 == 1) {
 71             System.out.println(0);
 72         } else if (n0 == 2) {
 73             System.out.println(1);
 74         } else {
 75             while (arr.size()  > (index + arr.get(index))) {
 76                 ArrayList<Integer> newarr = getnewarr(arr, index);
 77                 int max = getmax(newarr);
 78                 index = geti(arr, index, max)+1;
 79                 n++;
 80             } 
 81 
 82         }
 83         System.out.println(n);
 84     }
 85 
 86     public static int geti(ArrayList<Integer> arr, int index, int max) {
 87 
 88         int desc = maxindex(arr, max) - index;
 89         if (desc < arr.get(index) && desc > 0) {
 90             return maxindex(arr, max);
 91         } else
 92             return index + arr.get(index);
 93     }
 94 
 95     public static ArrayList<Integer> getnewarr(ArrayList<Integer> arr, int index) {
 96         ArrayList<Integer> newarr = new ArrayList<Integer>();
 97         for (int i = index; i <= index + arr.get(index); i++) {
 98             newarr.add(arr.get(i));
 99         }
100         return newarr;
101     }
102 
103     public static int maxindex(ArrayList<Integer> arr, int max) {
104         int index = 0;
105         for (int i = 0; i < arr.size(); i++) {
106             if (arr.get(i) == max) {
107                 index = i;
108             }
109         }
110         return index;
111     }
112 
113     public static int getmax(ArrayList<Integer> newarr) {
114         int max = 0;
115         for (int i = 0; i < newarr.size(); i++) {
116             if (newarr.get(i) >= max) {
117                 max = newarr.get(i);
118             }
119         }
120         return max;
121     }
122 
123 }

 



















以上是关于华为2018年4月实习笔试题2 数字跳跃的主要内容,如果未能解决你的问题,请参考以下文章

腾讯安全上海游戏部门笔试题

删数字 -- 2016华为笔试题

JavaScript笔试题(js高级代码片段)

阿里巴巴2021实习生笔试题20210608

2018年网易Java笔试题

腾讯笔试题2017暑期实习-有趣的数字