圖片該如何優化來提高網站效能?
阿新 • • 發佈:2020-12-07
一、題目描述
☆☆二、解法
方法1:滑動視窗. 時間複雜度 O(n) 、空間複雜度 O(1)
連續子陣列 ---> 【滑動視窗】
class Solution { public int minSubArrayLen(int s, int[] nums) { if (nums == null || nums.length == 0) return 0; /** * 寫法1 */ /* int l = 0, r = -1; // 定義[l...r]為滑動視窗,初始化為-1表示視窗不包含任何元素 int res = nums.length + 1; // 這個值是取不到的最大值 int tempSum = 0; while (l < nums.length) { if (tempSum >= s) { res = Math.min(res, r - l + 1); tempSum -= nums[l]; l ++; }else { // tempSum < s if (r < nums.length - 1) { // 注意此邊界! r ++; tempSum += nums[r]; }else { break; } } } return res > nums.length ? 0 : res;*/ /** * 寫法2 * 擴張視窗:為了找到一個可行解,找到了就不再擴張 * 收縮視窗:在長度上優化該可行解,直到條件被破壞 * 尋找下一個可行解,然後再優化到不能優化…… */ int l = 0, r = 0; int res = nums.length + 1; int tempSum = 0; while (r < nums.length) { // 主旋律是擴張,找可行解 tempSum += nums[r];while (tempSum >= s) { // 間歇性收縮,優化可行解,讓視窗長度挑戰最小紀錄 res = Math.min(res, r - l + 1); tempSum -= nums[l]; l ++; } r ++; } return res > nums.length ? 0 : res; } }