力扣1438. 絕對差不超過限制的最長連續子陣列-C語言實現-中等難度

清瀨灰二發表於2021-02-21

題目

傳送門

文字

給你一個整數陣列 nums ,和一個表示限制的整數 limit,請你返回最長連續子陣列的長度,該子陣列中的任意兩個元素之間的絕對差必須小於或者等於 limit 。
如果不存在滿足條件的子陣列,則返回 0 。

示例 1:

輸入:nums = [8,2,4,7], limit = 4
輸出:2
解釋:所有子陣列如下:
[8] 最大絕對差 |8-8| = 0 <= 4.
[8,2] 最大絕對差 |8-2| = 6 > 4.
[8,2,4] 最大絕對差 |8-2| = 6 > 4.
[8,2,4,7] 最大絕對差 |8-2| = 6 > 4.
[2] 最大絕對差 |2-2| = 0 <= 4.
[2,4] 最大絕對差 |2-4| = 2 <= 4.
[2,4,7] 最大絕對差 |2-7| = 5 > 4.
[4] 最大絕對差 |4-4| = 0 <= 4.
[4,7] 最大絕對差 |4-7| = 3 <= 4.
[7] 最大絕對差 |7-7| = 0 <= 4.
因此,滿足題意的最長子陣列的長度為 2 。

示例 2:

輸入:nums = [10,1,2,4,7,2], limit = 5
輸出:4
解釋:滿足題意的最長子陣列是 [2,4,7,2],其最大絕對差 |2-7| = 5 <= 5 。

示例 3:

輸入:nums = [4,2,2,2,4,4,2,2], limit = 0
輸出:3

提示:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^9
0 <= limit <= 10^9

來源:力扣(LeetCode)

模板

int longestSubarray(int* nums, int numsSize, int limit){

}

解題

分析

由題意可知:

我們需要分析給的陣列的連續子陣列的絕對差(陣列內最大的元素減去最小的元素得到的值)與所給的Limit進行比較,返回最長的連續且滿足絕對差<=limit的子陣列的長度

所以理解流程:

首先選取子陣列
然後獲取絕對差
比較limit
最後選取下一子陣列

然後加上我所能想到的優化

對於已經比較過的符合條件的長度再後面就無需再做比較

在這裡插入圖片描述

相關文章