相比二分更优,二分法每个询问都要进行一次二分查找,通过对询问数组排序可以直接规避掉查找。
思路:排序,前缀和+排序(复杂度都在排序上)
对苹果堆数组进行前缀和计算(在输入时直接计算),对询问数组排序。为了保证输出,利用hashmap映射一下数组与结果。
package org.niuke.solution11; import java.util.Arrays; import java.util.HashMap; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] apple = new int[n]; int temp = 0; for(int i = 0; i < n; i++){ temp += sc.nextInt(); apple[i] = temp; } int m = sc.nextInt(); int[] req = new int[m]; HashMap<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < m; i++){ req[i] = sc.nextInt(); } int[] reqCopy = Arrays.copyOf(req, m); Arrays.sort(req); int index = 0; for(int i = 0; i < m; i++){ while (index < n) if(req[i] <= apple[index]){ map.put(req[i], index + 1); break; }else{ index++; } } for(int i = 0; i < m; i++){ System.out.println(map.get(reqCopy[i])); } } }