LeetCode 2763. 所有子数组中不平衡数字之和 C#
原题链接
困难
作者:
hpstory
,
2023-07-05 14:03:54
,
所有人可见
,
阅读 98
C# 代码
public class Solution {
public int SumImbalanceNumbers(int[] nums) {
int n = nums.Length;
int result = 0;
// 令count[i] = i, 表示第i轮循环, 避免重复创建数组, 节省空间
int[] count = new int[n + 2];
Array.Fill(count, -1);
for (int i = 0; i < n; i++){
count[nums[i]] = i;
int ans = 0;
for (int j = i + 1; j < n; j++){
// 如果nums[j]在子数组冲出现过对结果没有影响, 只考虑nums[j], 没有出现过的情况
if (count[nums[j]] != i){
// 当nums[j] + 1 和 nums[j] - 1都没有出现过, 不平衡数字+1
ans++;
// 当nums[j] + 1 和 nums[j] - 1只有一个出现过,不平衡数字不变
// 由于前面已经+1, 所以这种情况下需要-1
// 当nums[j] + 1 和 nums[j] - 1都出现过,不平衡数字-1
if (count[nums[j] - 1] == i) ans--;
if (count[nums[j] + 1] == i) ans--;
count[nums[j]] = i;
}
result += ans;
}
}
return result;
}
}