From 12d32a43424da9dacbb22a8b99f62dcfef88560c Mon Sep 17 00:00:00 2001 From: kkunkka Date: Sat, 26 Apr 2025 12:22:29 +0800 Subject: [PATCH] kk --- .../dota/slidingWindow/_1577/Solution.java | 55 +++++++++++++++++++ .../dota/slidingWindow/_2444/Solution.java | 25 +++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/main/java/com/dota/slidingWindow/_1577/Solution.java create mode 100644 src/main/java/com/dota/slidingWindow/_2444/Solution.java diff --git a/src/main/java/com/dota/slidingWindow/_1577/Solution.java b/src/main/java/com/dota/slidingWindow/_1577/Solution.java new file mode 100644 index 0000000..5aa8a74 --- /dev/null +++ b/src/main/java/com/dota/slidingWindow/_1577/Solution.java @@ -0,0 +1,55 @@ +package com.dota.slidingWindow._1577; + +import java.util.Arrays; + +class Solution { + public static void main(String[] args) { + new Solution().numTriplets(new int[]{7,1,7,3,6,2,6,4,2,6,}, new int[]{5,5,2,2,7,1,7,2,6,7,6}); + } + + public int numTriplets(int[] nums1, int[] nums2) { + Arrays.sort(nums1); + Arrays.sort(nums2); + return df(nums1, nums2) + df(nums2, nums1); + } + + int df(int[] nums1, int[] nums2) { + var dp = new long[nums1.length]; + for (int i = 0; i < nums1.length; i++) { + dp[i] = (long) nums1[i] * nums1[i]; + } + + int cnt = 0; + for (long j : dp) { + int l = 0, r = nums2.length - 1; + while (l < r) { + long t = (long) nums2[l] * nums2[r]; + if (t == j) { + if (nums2[l] == nums2[r]) { + cnt += ((r - l) * (r - l + 1) / 2); + break; + } else { + int ll = 1; + int rr = 1; + while (nums2[l+1] == nums2[l]) { + l++; + ll++; + } + while (nums2[r-1] == nums2[r]) { + r--; + rr++; + } + cnt += ll*rr; + l++; + r--; + } + } else if (t > j) { + r--; + } else { + l++; + } + } + } + return cnt; + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/slidingWindow/_2444/Solution.java b/src/main/java/com/dota/slidingWindow/_2444/Solution.java new file mode 100644 index 0000000..572e8f7 --- /dev/null +++ b/src/main/java/com/dota/slidingWindow/_2444/Solution.java @@ -0,0 +1,25 @@ +package com.dota.slidingWindow._2444; + +class Solution { + public long countSubarrays(int[] nums, int minK, int maxK) { + long res = 0; + int min = -1, max = -1; + int l = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] < minK || nums[i] > maxK) { + min = -1; + max = -1; + l = i+1; + } if (nums[i] == maxK) { + max = i; + } if (nums[i] == minK) { + min = i; + } + + if (max != -1 && min != -1) { + res += Math.min(max, min) + 1 - l; + } + } + return res; + } +} \ No newline at end of file