首页 文章

数组操作黑客排名解决方案

提问于
浏览
-1

伙计们我想解决"Arrays Manipulation" in hacker rank

但是我在几个测试用例中面临超时错误,请帮助我理解下面代码中的问题 .

public class ArrayManipulation {


    public static void main(String [] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        long[] arr = new long[n];
        for(int i=0;i<n;i++) {
            arr[i]=0;
        }
        int left;
        int right;
        int val;

        for(int j=0;j<m;j++) {
            left = scanner.nextInt();
            right = scanner.nextInt();
            val = scanner.nextInt();
            int max, temp;
            while(left <= right) {
            arr[left-1] += val;
            left++;
            }
        }
        long temp=0,max=0;
        for(int i= 0;i<n;i++) {
            temp = arr[i];
            if(temp > max) {
                max = temp;
            }
        }
        System.out.println(max);
    }


}

1 回答

  • 0

    很酷,我不知道黑客的排名 . 因此在java中,数组初始化为0,因此您不必手动执行它来保存1个循环,如果您在计算时跟踪最大值,则不必在最后循环,从而节省1个以上环 . 如果数组足够大并且数据集的数量很少 . 这种变化应该会影响性能时间 . 告诉我这是否有效 .

    public static void main(String [] args) {
        Scanner scanner = new Scanner(System.in);
        int arrayLength = scanner.nextInt();
        int numberOfDataSets = scanner.nextInt();
        long[] arr = new long[arrayLength];
    
        long max=0;
        for(int j=0;j<numberOfDataSets;j++) {
            int left = scanner.nextInt();
            int right = scanner.nextInt();
            int val = scanner.nextInt();
            while(left <= right) {
                arr[left-1] += val;
                if(max < arr[left-1]){
                    max = arr[left-1];
                }
                left++;
            }
        }
        System.out.println(max);
    }
    

相关问题