From 406d17051a2493b8b4d6b40a8588c7ef998a7f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=98=A0=E8=BE=89?= <3385297953@qq.com> Date: Tue, 14 Oct 2025 19:35:12 +0800 Subject: [PATCH] 2025.10.14 --- ..._\351\231\210\346\230\240\350\276\211.cpp" | 19 ++++++++++++++ ..._\351\231\210\346\230\240\350\276\211.cpp" | 10 +++++++ ..._\351\231\210\346\230\240\350\276\211.cpp" | 14 ++++++++++ ..._\351\231\210\346\230\240\350\276\211.cpp" | 26 +++++++++++++++++++ ..._\351\231\210\346\230\240\350\276\211.cpp" | 23 ++++++++++++++++ 5 files changed, 92 insertions(+) create mode 100644 "topic03/submit/LC1186_\351\231\210\346\230\240\350\276\211.cpp" create mode 100644 "topic03/submit/LC1480_\351\231\210\346\230\240\350\276\211.cpp" create mode 100644 "topic03/submit/LC53_\351\231\210\346\230\240\350\276\211.cpp" create mode 100644 "topic03/submit/LC560_\351\231\210\346\230\240\350\276\211.cpp" create mode 100644 "topic03/submit/LC918_\351\231\210\346\230\240\350\276\211.cpp" 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 0000000..23aea85 --- /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 0000000..50c6647 --- /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 0000000..92a77c9 --- /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; + } +}; -- Gitee