郑州微信小程序,绍兴seo推广公司,建设网站费用记什么科目,音乐网站开发答辩ppt文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组#xff0c;请交换一对数值#xff08;每个数组中取一个数值#xff09;#xff0c;使得两个数组所有元素的和相等。
返回一个数组#xff0c;第一个元素是第一个数组中要交换的元素#xff0c;第二个元素是第二… 文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组请交换一对数值每个数组中取一个数值使得两个数组所有元素的和相等。
返回一个数组第一个元素是第一个数组中要交换的元素第二个元素是第二个数组中要交换的元素。若有多个答案返回任意一个均可。若无满足条件的数值返回空数组。
示例: 输入: array1 [4, 1, 2, 1, 1, 2], array2 [3, 6, 3, 3] 输出: [1, 3] 示例: 输入: array1 [1, 2, 3], array2 [4, 5, 6] 输出: [] 提示
1 array1.length, array2.length 100000 点击此处跳转题目。
二、C# 题解 排序 双指针
public class Solution {public int[] FindSwapValues(int[] array1, int[] array2) {int sum1 array1.Sum(), sum2 array2.Sum();int diff sum2 - sum1;if (diff % 2 ! 0) return Array.Emptyint(); // 如果差值为奇数则必定找不到答案diff 1; // diff 除以 2 才是互换两个数的差值Array.Sort(array1);Array.Sort(array2);int j 0;for (var i 0; i array1.Length; i) {if (i 0 array1[i] array1[i - 1]) continue; // 和前面一样的数则跳过int target array1[i] diff; // 目标数while (j array2.Length array2[j] target) j; // 比目标数小则继续找if (j array2.Length) break; // 判断越界if (array2[j] target) return new[] { array1[i], array2[j] }; // 找到目标则返回结果}return Array.Emptyint();}
}时间172 ms击败 42.86% 使用 C# 的用户内存50.94 MB击败 71.43% 使用 C# 的用户 哈希表直接查找
public class Solution {public int[] FindSwapValues(int[] array1, int[] array2) {int sum1 array1.Sum(), sum2 array2.Sum();int diff sum2 - sum1;if (diff % 2 ! 0) return Array.Emptyint();diff 1;HashSetint set new HashSetint(array2);foreach (int i in array1) {if (set.Contains(i diff)) return new[] { i, i diff };}return Array.Emptyint();}
}时间168 ms击败 85.71% 使用 C# 的用户内存49.35 MB击败 85.71% 使用 C# 的用户