闲来

题目链接: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;
    }
};
posted @ 2024-12-05 17:37  fufuaifufu  阅读(14)  评论(0编辑  收藏  举报