如何优化嵌套for循环,提升无符合条件时的代码执行速度?
优化C#两数之和查找性能的方案
原代码通过嵌套for循环查找数组中是否存在两个不同元素之和为7777,最坏情况(无符合条件的元素对)时间复杂度为O(n²),数据量较大时耗时极高。以下是优化方案,将时间复杂度降至O(n):
优化思路
利用哈希集合(HashSet<int>)存储已遍历的元素,对每个元素计算目标补值(7777 - 当前元素):
- 若集合中已存在该补值,说明之前遍历过的元素与当前元素之和为7777,且二者是不同位置的元素,直接输出"Yes"并终止程序。
- 若不存在,将当前元素加入集合,继续遍历。
这种方式只需遍历数组一次,最坏情况下也仅需O(n)的时间和空间开销,远快于嵌套循环。
优化后的代码
替换原代码中case 1内的逻辑:
case 1: HashSet<int> seen = new HashSet<int>(); foreach (int num in A) { int complement = 7777 - num; if (seen.Contains(complement)) { Console.WriteLine("Yes"); return; } // 先判断再加入,避免同一元素被重复匹配(确保是两个不同元素) seen.Add(num); } Console.WriteLine("No"); break;
额外优化点
- 原代码中
N变量已读取但未使用,可以直接用N初始化数组,避免依赖data2.Length:int[] A = new int[N]; for (int i = 0; i < N; i++) { A[i] = int.Parse(data2[i]); } - 若需适配严格输入校验场景,可增加格式异常捕获,但算法题场景通常默认输入格式合法,可忽略。
内容的提问来源于stack exchange,提问作者Kireg
相关产品推荐
相关产品推荐

