未排序正整数组中累加和为指定值的最长子数组长度
生活随笔
收集整理的這篇文章主要介紹了
未排序正整数组中累加和为指定值的最长子数组长度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:給定一個數組arr,該數組無序,但每個值都為正數,在給定一個正數k。求arr中所有的子數組中所有元素累加為k的最長子數組長度。?
例如,arr = [1,2,1,1,1],k = 3.?
累加和為3的最長子數組為[1,1,1],所以返回結果為3。
基本思路:
使用兩個指針left和right,代表子數組的范圍,初始時都為 0。使用變量sum記錄子數組的累加和,初始為arr[0]。即arr[0…0]的累加和。根據sum與k的比較結果確定指針的移動:
?1、如果 sum == k,說明目前子數組的累加和滿足條件,該子數組的長度可知 right - left + 1。因為整個數組元素都是正數,所以,在擴展該子數組顯然不可能等于k,所以我們應該令left加1,開始考察以 left + 1 位置開始的子數組,同時令 sum -= arr[left].
?2、如果 sum < k,說明還需要加上 right 后面的元素,所以令right + 1,同時令 sum += arr[right+1]。這里需要注意 right + 1 后是否越界。?
?
?3、如果 sum > k,說明此時子數組的累計和已經大于k,所以令left + 1 表示開始考慮以 left + 1 開始的子數組,同時令 sum -= arr[left].
?
?
總結
以上是生活随笔為你收集整理的未排序正整数组中累加和为指定值的最长子数组长度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遍历二叉树的神级方法(Morris遍历)
- 下一篇: 未排序数组中累加和为给定值的最长子数组系