kk
This commit is contained in:
55
src/main/java/com/dota/slidingWindow/_1577/Solution.java
Normal file
55
src/main/java/com/dota/slidingWindow/_1577/Solution.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
25
src/main/java/com/dota/slidingWindow/_2444/Solution.java
Normal file
25
src/main/java/com/dota/slidingWindow/_2444/Solution.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user