闲来
题目链接:https://leetcode.cn/problems/identify-the-largest-outlier-in-an-array/description/
题解代码:
class Solution {
public:
int getLargestOutlier(std::vector<int>& nums) {
int totalSum = 0;
int n = nums.size();
std::sort(nums.begin(), nums.end());
// 计算数组的总和
for (int num : nums) {
totalSum += num;
}
// 使用哈希表存储数组中的每个元素及其索引
std::unordered_map<int, int> numIndex;
for (int i = 0; i < n; ++i) {
numIndex[nums[i]] = i;
}
// 从大到小遍历数组,尝试移除每个数
for (int i = n - 1; i >= 0; --i) {
int remainingSum = totalSum - nums[i];
int halfRemainingSum = remainingSum / 2;
// 检查剩余数的总和的一半是否等于数组中的某个数(除了被移除的那个数)
if (halfRemainingSum * 2 == remainingSum && numIndex.count(halfRemainingSum) && numIndex[halfRemainingSum] != i) {
return nums[i];
}
}
// 如果没有找到符合条件的数,则返回-1作为未找到答案的标志
return -1;
}
};