From 475f28b7a24f434e6b84a2cf8206dfc8c7726e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E4=B8=89?= <15933693+three-three33@user.noreply.gitee.com> Date: Tue, 4 Nov 2025 19:03:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E9=A2=98=E4=B8=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._\351\202\223\345\256\266\345\205\264.cpp" | 25 ++++++++++++ ..._\351\202\223\345\256\266\345\205\264.cpp" | 38 +++++++++++++++++++ ..._\351\202\223\345\256\266\345\205\264.cpp" | 23 +++++++++++ ..._\351\202\223\345\256\266\345\205\264.cpp" | 38 +++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 "topic03/submit/LC0238_\351\202\223\345\256\266\345\205\264.cpp" create mode 100644 "topic03/submit/LC1208_\351\202\223\345\256\266\345\205\264.cpp" create mode 100644 "topic03/submit/LC1248_\351\202\223\345\256\266\345\205\264.cpp" create mode 100644 "topic03/submit/LC1413_\351\202\223\345\256\266\345\205\264.cpp" diff --git "a/topic03/submit/LC0238_\351\202\223\345\256\266\345\205\264.cpp" "b/topic03/submit/LC0238_\351\202\223\345\256\266\345\205\264.cpp" new file mode 100644 index 0000000..ff92bf6 --- /dev/null +++ "b/topic03/submit/LC0238_\351\202\223\345\256\266\345\205\264.cpp" @@ -0,0 +1,25 @@ +#include +using namespace std; + +// 【题目】力扣.0238 除自身以外数组的乘积 +// 【难度】中等 +// 【提交】https://leetcode.cn/problems/product-of-array-except-self/submissions/671162729/?envType=problem-list-v2&envId=prefix-sum +// 【标签】【数组】【前缀和】 + +class Solution { +public: + vector productExceptSelf(vector& nums) { + int length = nums.size(); + vector answer(length); + answer[0] = 1; + for (int i = 1; i < length; i++) { + answer[i] = nums[i - 1] * answer[i - 1]; + } + int R = 1; + for (int i = length - 1; i >= 0; i--) { + answer[i] = answer[i] * R; + R *= nums[i]; + } + return answer; + } +}; diff --git "a/topic03/submit/LC1208_\351\202\223\345\256\266\345\205\264.cpp" "b/topic03/submit/LC1208_\351\202\223\345\256\266\345\205\264.cpp" new file mode 100644 index 0000000..6ee93fb --- /dev/null +++ "b/topic03/submit/LC1208_\351\202\223\345\256\266\345\205\264.cpp" @@ -0,0 +1,38 @@ +#include +using namespace std; + +// Ŀ.1208ʹַ +// Ѷȡе +// ύhttps://leetcode.cn/problems/get-equal-substrings-within-budget/submissions/671163566/?envType=problem-list-v2&envId=prefix-sum +// ǩֲַҡǰ׺͡ڡ + +class Solution { +public: + int binarySearch(const vector& accDiff, int endIndex, int target) { + int low = 0, high = endIndex; + while (low < high) { + int mid = (high - low) / 2 + low; + if (accDiff[mid] < target) { + low = mid + 1; + } + else { + high = mid; + } + } + return low; + } + + int equalSubstring(string s, string t, int maxCost) { + int n = s.length(); + vector accDiff(n + 1, 0); + for (int i = 0; i < n; i++) { + accDiff[i + 1] = accDiff[i] + abs(s[i] - t[i]); + } + int maxLength = 0; + for (int i = 1; i <= n; i++) { + int start = binarySearch(accDiff, i, accDiff[i] - maxCost); + maxLength = max(maxLength, i - start); + } + return maxLength; + } +}; diff --git "a/topic03/submit/LC1248_\351\202\223\345\256\266\345\205\264.cpp" "b/topic03/submit/LC1248_\351\202\223\345\256\266\345\205\264.cpp" new file mode 100644 index 0000000..bccb092 --- /dev/null +++ "b/topic03/submit/LC1248_\351\202\223\345\256\266\345\205\264.cpp" @@ -0,0 +1,23 @@ +#include +using namespace std; + +// Ŀ.1248ͳ[] +// Ѷȡе +// ύhttps://leetcode.cn/problems/count-number-of-nice-subarrays/submissions/671165467/?envType=problem-list-v2&envId=prefix-sum +// ǩ顿ϣѧǰ׺͡ڡ + +class Solution { +public: + int numberOfSubarrays(vector& nums, int k) { + int n = (int)nums.size(); + int odd[n + 2], ans = 0, cnt = 0; + for (int i = 0; i < n; ++i) { + if (nums[i] & 1) odd[++cnt] = i; + } + odd[0] = -1, odd[++cnt] = n; + for (int i = 1; i + k <= cnt; ++i) { + ans += (odd[i] - odd[i - 1]) * (odd[i + k] - odd[i + k - 1]); + } + return ans; + } +}; diff --git "a/topic03/submit/LC1413_\351\202\223\345\256\266\345\205\264.cpp" "b/topic03/submit/LC1413_\351\202\223\345\256\266\345\205\264.cpp" new file mode 100644 index 0000000..81e3c0f --- /dev/null +++ "b/topic03/submit/LC1413_\351\202\223\345\256\266\345\205\264.cpp" @@ -0,0 +1,38 @@ +#include +using namespace std; + +// Ŀ1413.͵õСֵ +// Ѷȡ +// ύhttps://leetcode.cn/problems/minimum-value-to-get-positive-step-by-step-sum/submissions/671167072/?envType=problem-list-v2&envId=prefix-sum +// ǩ顿ǰ׺ֲ͡ҡ + +class Solution { +public: + int minStartValue(vector& nums) { + int m = *min_element(nums.begin(), nums.end()); + if (m >= 0) { + return 1; + } + int left = 1, right = -m * nums.size() + 1; + while (left < right) { + int medium = (left + right) / 2; + if (valid(medium, nums)) { + right = medium; + } + else { + left = medium + 1; + } + } + return left; + } + + bool valid(int startValue, vector& nums) { + for (int num : nums) { + startValue += num; + if (startValue <= 0) { + return false; + } + } + return true; + } +}; -- Gitee