From 975b2b87a2f3842cc08764ac2a8ad8c43d6354d2 Mon Sep 17 00:00:00 2001 From: kkunkka Date: Wed, 9 Apr 2025 23:28:52 +0800 Subject: [PATCH] kk --- .../dota/slidingWindow/_1234/Solution.java | 26 +++++++++++ .../dota/slidingWindow/_2875/Solution.java | 46 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/main/java/com/dota/slidingWindow/_1234/Solution.java create mode 100644 src/main/java/com/dota/slidingWindow/_2875/Solution.java diff --git a/src/main/java/com/dota/slidingWindow/_1234/Solution.java b/src/main/java/com/dota/slidingWindow/_1234/Solution.java new file mode 100644 index 0000000..bcac72b --- /dev/null +++ b/src/main/java/com/dota/slidingWindow/_1234/Solution.java @@ -0,0 +1,26 @@ +package com.dota.slidingWindow._1234; + +class Solution { + public int balancedString(String s) { + int n = s.length(); + int k = n/4; + var dp = new int[265]; + int res = n; + int l = 0; + for (int i = 0; i < n; i++) { + dp[s.charAt(i)]++; + } + if (dp['Q']==dp['W']&&dp['W']==dp['E']&&dp['E']==dp['R']) { + return 0; + } + + for (int i = 0; i < n; i++) { + dp[s.charAt(i)]--; + while (l<=i && dp['Q']<=k&&dp['W']<=k&&dp['E']<=k&&dp['R']<=k) { + res = Math.min(res, i - l + 1); + dp[s.charAt(l++)]++; + } + } + return res; + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/slidingWindow/_2875/Solution.java b/src/main/java/com/dota/slidingWindow/_2875/Solution.java new file mode 100644 index 0000000..a4d606f --- /dev/null +++ b/src/main/java/com/dota/slidingWindow/_2875/Solution.java @@ -0,0 +1,46 @@ +package com.dota.slidingWindow._2875; + +class Solution { + public static void main(String[] args) { + new Solution().minSizeSubarray(new int[]{2,4,6,8}, 3); + } + public int minSizeSubarray(int[] nums, int target) { + int sum = 0; + for (int num : nums) { + sum += num; + } + int n = nums.length; + int res = 0; + int k=0; + if (sum <= target) { + k = target / sum; + res = k * n; + target = target % sum; + } + if (target == 0) { + return res; + } + + int l = 0; + sum = 0; + var cnt = n+1; + for (int i = 0; i < 2 * n; i++) { + sum += nums[i%n]; + if (sum == target) { + cnt = Math.min(cnt, i - l + 1); + } + while (sum > target) { + sum -= nums[l%n]; + l++; + if (sum==target) { + cnt = Math.min(cnt, i - l + 1); + } + } + } + + if(cnt == n+1 ) { + return -1; + } + return res + cnt; + } +} \ No newline at end of file