360在线编程题2-2017校招服务器端-跳格子

玩游戏 跳格子1-N 每个格子高度不同;

连续3个递增格子则视为是有难度的;

如1,2,3,4  {1,2,3} {2,3,4}是两个连续3个递增数列 因而有2个难度;

然后输入查询 比如输入[1,3] 包含{1,2,3}递增数列  难度为1,输入[1,4]则难度为2;

输入:

  • 格子数;
  • 每个格子的高度
  • 查询总数;
  • 查询的起始范围;

输出:

  • 每个起始范围内的难度数;
思路:哈希数组保存每个格子与之前的两个格子是否构成递增序列,每次查询[start,end]从start+2的位置开始遍历true的总数

import java.util.Scanner;
//360校招 -难度数 Evan XU -TJU
public class Test{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int arrL = input.nextInt();
        int arr[] = new int[arrL];
        boolean flag[] = new boolean[arrL];  //哈希表
        for (int i = 0; i < arrL; i++) {
            arr[i]=input.nextInt();
        }
        buildBoolean(arr,flag);   //构建哈希表

        int queryL = input.nextInt();
        int res[] = new int[queryL];
        for (int i = 0; i < queryL; i++) {
            res[i]=findCount(flag,input.nextInt(),input.nextInt());
        }
        for (int i = 0; i < queryL; i++) {
            System.out.println(res[i]);
        }

    }
    public static void buildBoolean(int arr[],boolean flag[]){
        for (int i=2;i<arr.length;i++){
            if(arr[i]>arr[i-1]&&arr[i-1]>arr[i-2])
                flag[i]=true;
            else
                flag[i]=false;
        }
    }
    public static int findCount(boolean flag[],int i,int j){   //查询[i,j]范围内的难度
        int flagL =flag.length;
        if(j-i<2||i<1||i>flagL||j<1||j>flagL)
            return 0;
        int count =0 ;
        for (int k = i+1; k <=j-1 ; k++) {
            if (flag[k])
                count++;
        }
        return count;
    }
}
测试用例:

5 
1 2 3 4 4
5
1 2
1 3
2 4
1 4
1 5
0
1
1
2
0



猜你喜欢

转载自blog.csdn.net/evanxuhe/article/details/78050594
今日推荐