原題**:
there is at least one subarray that it's sum equals to zero.
您在真實的面試中是否遇到過這個題? 是
標籤雜湊表
子陣列思路1:設定兩根指標start與end,每次查詢固定start,end向右移動,遍歷陣列,找到和為0的return出去。這種屬於暴力破解,時間複雜度o(n^2),空間複雜度o(1)。【時間596ms】
ac**:
classsolution
if (sum==0
) }}
};
思路2:利用雜湊表,建立乙個map,記錄從第乙個元素開始到當前元素之和 與 當前元素下標 的對應關係,若有一段子陣列和為0,那麼一定有乙個和對應兩個下標,此時就找到了一段連續的和為0的子陣列,時間複雜度o(n),空間複雜度o(n)。**此處
ac**:
classsolution
m.insert(pair
(sum,i));}}
};
如果不對map初始化m[0] = -1,則 if 程式塊可以改成:
if (m.find(sum)!=m.end())else
if (m.find(sum)==m.end()&&sum==0
)else
參考:
LintCode 138 子陣列之和
給定乙個整數陣列,找到和為零的子陣列。你的 應該返回滿足要求的子陣列的起始位置和結束位置 樣例 1 輸入 3,1,2,3,4 輸出 0,2 或 1,3 樣例解釋 返回任意一段和為0的區間即可。樣例 2 輸入 3,1,4,2,3,4 輸出 1,5 至少有乙個子陣列的和為 0 public class ...
子陣列之和
給定乙個含有n個元素的整形陣列a,再給定乙個和sum,求出陣列中滿足給定和的所有元素組合,舉個例子,設有陣列a 6 sum 10,則滿足和為10的所有組合是 注意,這是個n選m的問題,並不是兩兩組合問題。最直觀的想法就是窮舉,把陣列中元素的所有組合情況都找出來,然後看看哪些組合滿足給定的和即可,這種...
連續的子陣列之和
如果直接用優雅一點的暴力應該可以跑過 比較每一對子陣列判斷是否為k的倍數 最壞情況下是k需要最後兩個資料相加才使得條件成立,時間複雜度為 o n 2 tips 一定要注意細節特殊處理0,面對0無法進行取餘,只有0是0的倍數因此搜尋連續兩個及以上的0即為true 這裡都是血和淚 cpp 如下 clas...