diff --git "a/topic03/submit/LC1186_\351\231\210\346\230\240\350\276\211.cpp" "b/topic03/submit/LC1186_\351\231\210\346\230\240\350\276\211.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..23aea85ced99fc2e711c14b1e7ee1564c7045675 --- /dev/null +++ "b/topic03/submit/LC1186_\351\231\210\346\230\240\350\276\211.cpp" @@ -0,0 +1,19 @@ +class Solution { +public: + int maximumSum(vector& arr) { + int n=arr.size(); + vector left(n),right(n); + left[0]=arr[0],right[n-1]=arr[n-1]; + int res=left[0]; + //像双指针解法 + for(int i=1;i runningSum(vector& nums) { + int n = nums.size(); + for(int i=1;i& nums) { + int ans=INT_MIN; + int pre_sum=0; + int min_pre_sum=0; + for(int x:nums){ + pre_sum += x; + ans=max(ans,pre_sum-min_pre_sum); + min_pre_sum=min(min_pre_sum,pre_sum); + } + return ans; + } +}; diff --git "a/topic03/submit/LC560_\351\231\210\346\230\240\350\276\211.cpp" "b/topic03/submit/LC560_\351\231\210\346\230\240\350\276\211.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..50c664746f8a0008b556d97c05a9bf96461b3c97 --- /dev/null +++ "b/topic03/submit/LC560_\351\231\210\346\230\240\350\276\211.cpp" @@ -0,0 +1,26 @@ +class Solution { + public int subarraySum(int[] nums, int k) { + //假设索引i处的前缀和为preSum(i)(前缀和包含nums[i]的值) + //那么如果存在preSum(i)-k=preSum(j)--索引j处的前缀和(j < i) + //则说明存在一个 [j-1,... i]的子数组符合条件 + //那么获取子数组的个数,等价于,获取preSum(i)-k=preSum(j) 出现的次数 + + //定义HashMap, key=preSum, value=preSum 出现的次数 + Map map = new HashMap<>(); + //针对特殊case:nums=[1],k=1;nums=[1,2,3],k=6,map插入初始值0->1 + //记录第一次出现某处索引preSum(i) = k,preSum(i) - k = 0,count=1 + map.put(0, 1); + int preSum = 0; + int res = 0; + for (int i = 0; i < nums.length; i++) { + preSum += nums[i]; + if (map.containsKey(preSum - k)) { + //如果存在满足:preSum(i)-k=preSum(j) 对应的preSum(j),将preSum(j)出现的次数累加到res + res += map.get(preSum - k); + } + //将preSum加入map,preSum已经存在count就+1 + map.put(preSum, map.getOrDefault(preSum, 0) + 1); + } + return res; + } +} diff --git "a/topic03/submit/LC918_\351\231\210\346\230\240\350\276\211.cpp" "b/topic03/submit/LC918_\351\231\210\346\230\240\350\276\211.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..92a77c95a93522fee245eb2ab987bc462ff2560d --- /dev/null +++ "b/topic03/submit/LC918_\351\231\210\346\230\240\350\276\211.cpp" @@ -0,0 +1,23 @@ +class Solution { +public: + int maxSubarraySumCircular(vector& nums) { + int n=nums.size(); + vectorleftMax(n); + leftMax[0]=nums[0]; + int leftSum=nums[0]; + int pre=nums[0]; + int res=nums[0]; + for(int i=1;i0;i--){ + rightSum +=nums[i]; + res=max(res,rightSum+leftMax[i-1]); + } + return res; + } +};