题目
未排序数组中累加和小于或等于给定值的最长子数组长度
java代码
package com.lizhouwei.chapter8;/** * @Description: 未排序数组中累加和小于或等于给定值的最长子数组长度 * @Author: lizhouwei * @CreateDate: 2018/5/8 20:14 * @Modify by: * @ModifyDate: */public class Chapter8_12 { public int maxLength(int[] arr, int k) { int sum = 0; int[] helpArr = new int[arr.length + 1]; for (int i = 0; i < arr.length; i++) { sum = sum + arr[i]; helpArr[i + 1] = Math.max(sum, helpArr[i]); } sum = 0; int len = 0; int maxLen = 0; int index = 0; for (int i = 0; i < arr.length; i++) { sum = sum + arr[i]; index = bs(helpArr, sum - k); len = index == -1 ? 0 : i - index + 1; maxLen = Math.max(maxLen, len); } return maxLen; } public int bs(int[] helpArr, int num) { int left = 0; int right = helpArr.length - 1; int mid = 0; int res = -1; while (left < right) { mid = (left + right) / 2; if (helpArr[mid] < num) { left = mid + 1; } else { res = mid; right = mid - 1; } } return res; } //测试 public static void main(String[] args) { Chapter8_12 chapter = new Chapter8_12(); int[] arr = {3, -2, -4, 0, 6}; System.out.print("数组 arr = {3, -2, -4, 0, 6}中和小于-2的最长子数组长度为:"); int maxLen = chapter.maxLength(arr, -2); System.out.print(maxLen); }}
结果