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