绝对差不超过限制的最长数组
2021-01-29 20:20
标签:inf 计数器 数列 java size 数字 整数 image 结束 思路 既然每个数字都要做开头 双重for循环 O(n^2) 当开头的数字确定时,向后遍历 在每一次向后遍历过程中,动态更新数列中的min和max,同时引用count计数器 验证max-min的绝对差 与 limit 的关系 将符合结果的count 装入集合list 对集合list进行sort排序,取最大值 结果 超出内存限制 时间就更不用提了 代码 思路 代码 思路 代码 绝对差不超过限制的最长数组 标签:inf 计数器 数列 java size 数字 整数 image 结束 原文地址:https://www.cnblogs.com/yh-simon/p/12822579.html思路1
/**
* 绝对差不超过限制的最长连续子数组
*
* 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,
* 该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。
* 如果不存在满足条件的子数组,则返回 0 。
*
* ?
* 53/54 超出内存时间限制
* @param nums
* @param limit
* @return
*/
public int longestSubarray(int[] nums, int limit) {
List
优化思路1
/*
*超出时间限制
**/
public int longestSubarray2(int[] nums, int limit) {
int ans=0;
for(int i=0;i
思路2 (滑动窗口)
class Solution {
public int longestSubarray(int[] nums, int limit) {
int ans = 0;
int len = nums.length;
int subMax = 0;
int min=nums[0];
int max=min;
for (int start = 0, end = 0; start limit) {
ans = Math.max(ans, end - start);
start++;
//新起点
end=start;
//因为本次循环结束 进入下一次循环end++,为了保证start和end指针同时指向 新起点,则end--;
end--;
min=max=nums[start];
subMax=0;
}else{
ans=Math.max(ans, end-start+1);
}
}
return ans;
}
}