leetcode[523] 連續的子數組和(前綴和求解,dp求解過了一半樣例,之後補上)

523. 連續的子數組和

難度中等107

給定一個包含非負數的數組和一個目標整數 k,編寫一個函數來判斷該數組是否含有連續的子數組,其大小至少爲 2,總和爲 k 的倍數,即總和爲 n*k,其中 n 也是一個整數

示例 1:

輸入: [23,2,4,6,7], k = 6
輸出: True
解釋: [2,4] 是一個大小爲 2 的子數組,並且和爲 6。

示例 2:

輸入: [23,2,6,4,7], k = 6
輸出: True
解釋: [23,2,6,4,7]是大小爲 5 的子數組,並且和爲 42。

解題思路,求出前i項的前綴和,然後用一個j進行區間劃分進行遍歷

class Solution {
    public boolean checkSubarraySum(int[] nums, int k) {
        int sum = 0;
        int [] curSum = new int[nums.length+1];
        for(int i = 0;i<nums.length;i++){
            sum += nums[i];
            curSum[i+1] = sum;
        }
        for(int i = 0;i<curSum.length;i++){
            for(int j = i+2;j<curSum.length;j++){
                int temp = curSum[j] - curSum[i];
                if((temp == 0 && k == 0) || (k != 0 && temp % k == 0)){
                    return true;
                }
            }
        }
        return false;
    }
}

解題思路二:我用dp數組存儲每一種可能。然後遍歷,但是有錯,希望大家糾正

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章