LeetCode 面试题 16.24. 数对和

文章目录

一、题目

设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。

示例 1:

输入: nums = [5,6,5], target = 11
输出: [[5,6]]

示例 2:

输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]

提示:

  • nums.length <= 100000
  • -10^5 <= nums[i], target <= 10^5

点击此处跳转题目

二、C# 题解

使用双指针双向检测,注意要先排序。

csharp 复制代码
public class Solution {
    public IList<IList<int>> PairSums(int[] nums, int target) {
        IList<IList<int>> ans = new List<IList<int>>();
        Array.Sort(nums);
        int i = 0, j = nums.Length - 1; // 双指针
        while (i < j) {
            int sum = nums[i] + nums[j];                                // 两数和
            if (sum == target) ans.Add(new[] { nums[i++], nums[j--] }); // 找到则添加,i、j 均挪位
            else if (sum > target) j--;                                 // 如果大了,右指针左移
            else i++;                                                   // 否则左指针右移
        }
        return ans;
    }
}
  • 时间:216 ms,击败 83.33% 使用 C# 的用户
  • 内存:65.98 MB,击败 16.67% 使用 C# 的用户

直接遍历数组,使用 map 记录出现过的数字和次数,每次查找是否有匹配的 another。

csharp 复制代码
public class Solution {
    public IList<IList<int>> PairSums(int[] nums, int target) {
        IList<IList<int>>    ans = new List<IList<int>>();
        Dictionary<int, int> dic = new Dictionary<int, int>(); // 存储出现过的数字及次数
        foreach (int num in nums) {
            int another = target - num; // 匹配的另一个数
            if (dic.TryGetValue(another, out int value)) { // 尝试找之前是否出现过
                if (value > 0) { // 如果出现过,则次数 - 1,添加结果
                    dic[another]--;
                    ans.Add(new[] { num, another });
                }
                else if (!dic.TryAdd(num, 1)) dic[num]++; // 出现过但次数被用完,添加 num 的记录
            }
            else if (!dic.TryAdd(num, 1)) dic[num]++; // 未出现过,添加 num 的记录
        }
        return ans;
    }
}
  • 时间:204 ms,击败 100.00% 使用 C# 的用户
  • 内存:60.31 MB,击败 100.00% 使用 C# 的用户
相关推荐
hetao17338377 分钟前
2025-12-12~14 hetao1733837的刷题笔记
数据结构·c++·笔记·算法
鲨莎分不晴1 小时前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习
搞科研的小刘选手2 小时前
【ISSN/ISBN双刊号】第三届电力电子与人工智能国际学术会议(PEAI 2026)
图像处理·人工智能·算法·电力电子·学术会议
拉姆哥的小屋2 小时前
从混沌到秩序:条件扩散模型在图像转换中的哲学与技术革命
人工智能·算法·机器学习
Sammyyyyy2 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay
小小代码团2 小时前
2026 Office Online Server (全网最新/最详细/含问题修复) 终极部署教程
windows·microsoft·c#
sin_hielo2 小时前
leetcode 2110
数据结构·算法·leetcode
Jay20021113 小时前
【机器学习】33 强化学习 - 连续状态空间(DQN算法)
人工智能·算法·机器学习
铭哥的编程日记3 小时前
后端面试通关笔记:从真题到思路(五)
面试·职场和发展
panzer_maus3 小时前
归并排序的简单介绍
java·数据结构·算法