public List<Integer> getMaxFromLimit(Integer[] nums, int k) {
List<Integer> list = Arrays.asList(nums);
Map<String, Integer> subMaxDetail;
List<Integer> result = new ArrayList<>();
List<Integer> subList = list.subList(0, k);
//初始化最大值详情
subMaxDetail = this.getMaxSubList(subList, 0,k);
result.add(subMaxDetail.get("value"));
for (int i = 1; i <= list.size() - k; i++) {
subList = list.subList(i, i + k);
if (subMaxDetail.get("index") < i) {
subMaxDetail = this.getMaxSubList(subList, i,k);
} else if (subMaxDetail.get("value") < subList.get(subList.size() - 1)) {
subMaxDetail.put("index", i);
subMaxDetail.put("value", subList.get(subList.size() - 1));
}
result.add(subMaxDetail.get("value"));
}
return result;
}
//获得字串最大值
private Map<String, Integer> getMaxSubList(List<Integer> subList, int startIndex,int k) {
int max = Integer.MIN_VALUE;
Map<String, Integer> subMaxDetail = new HashMap<>();
max = subList.stream().max(Comparator.naturalOrder()).orElse(max);
subMaxDetail.put("index", subList.indexOf(max)+startIndex);
subMaxDetail.put("value", max);
return subMaxDetail;
}
Java双端队列给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。
最新推荐文章于 2024-07-31 19:38:21 发布