cs: add «2179. Count Good Triplets in an Array»

URL:	https://leetcode.com/problems/count-good-triplets-in-an-array/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2025-04-15 15:16:26 +02:00
parent 80ae33d3d0
commit 02a57cd6f3
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -0,0 +1,56 @@
public class Solution {
private class FenwickTree {
private int[] tree;
public FenwickTree(int size) {
tree = new int[size + 1];
}
public int this[int i] {
get {
var res = 0;
for (++i; i > 0; i -= i & -i) {
res += tree[i];
}
return res;
}
set {
for (++i; i < tree.Length; i += i & -i) {
tree[i] += value;
}
}
}
}
public long GoodTriplets(int[] nums1, int[] nums2) {
var n = nums1.Length;
var pos2 = new int[n];
for (var i = 0; i < n; ++i) {
pos2[nums2[i]] = i;
}
var reversedMapping = new int[n];
for (var i = 0; i < n; ++i) {
reversedMapping[pos2[nums1[i]]] = i;
}
long count = 0;
var t = new FenwickTree(n);
for (var value = 0; value < n; ++value) {
var pos = reversedMapping[value];
var left = t[pos];
t[pos] = 1;
var right = (n - 1 - pos) - (value - left);
count += (long)left * right;
}
return count;
}
}