2022-03-30 「325. 和等于 k 的最長子數(shù)組長度」

今日中等題:https://leetcode-cn.com/problems/maximum-size-subarray-sum-equals-k/
思路和題解不一樣,想用數(shù)學(xué)的方法,結(jié)合雙指針來做,結(jié)果單個用例能跑過,k稍微不那么好找一點(diǎn)的數(shù)組,就運(yùn)算超時了,說明算法還是比較差的,時間復(fù)雜度太高。

今天先記錄一下我稀碎的解題思路,明天再繼續(xù)研究題解算法:

  1. 既然是找最長連續(xù)子串,那么最大的一定是數(shù)組本身,所以先把整個數(shù)組的和求出來為sum
  2. 用sum和k做比較,如果sum比較大,那肯定要把頭尾里比較大的那個舍掉,這時候用頭尾指針i和l-j-1來定義坐標(biāo),然后把sum中舍棄的那個值對應(yīng)減掉,也就是sum -=nums[x]
  3. 再比較,如果sum和k相等了,那就把l-j-1-i輸出,此刻一定是最大長度

其實(shí)這個方法是從測試數(shù)據(jù)里找規(guī)律,反推出來的,寫的時候隱隱感覺到是有問題的,可能會誤刪一些數(shù)據(jù)。

題目的首個答案可以通過

經(jīng)不起考驗(yàn)
class Solution {
    public int maxSubArrayLen(int[] nums, int k) {
        int i = 0, j = 0, l = nums.length, sum = 0, max = 0;
        for (int m=0; m< l-1; m++) {
            sum += nums[m];
        }
        while(i+j<l-1) {
            if (sum == k) {
                max = Math.max(max, l-j-1-i);
                return max;
            }
            else if ((sum > k && nums[i] >= nums[l-j-1]) || (sum < k && nums[i] < nums[l-j-1])) {
                i++;
                sum -= nums[i];
            }
            else if ((sum > k && nums[i] < nums[l-j-1]) || (sum > k && nums[i] >= nums[l-j-1])) {
                j++;
                sum -= nums[j];
            }
        }
        return 0;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容