C#中两个整数元组的总和
发布时间:2020-12-16 00:26:01 所属栏目:百科 来源:网络整理
导读:我正在努力解决这个问题,就像准备面试一样: 编写一个函数,给定一个列表和一个目标和,返回任何两个不同元素的从零开始的索引,这两个元素的总和等于目标总和.如果没有这样的元素,则该函数应返回null. 例如,FindTwoSum(new List(){1,3,5,7,9},12)应该返回以下
我正在努力解决这个问题,就像准备面试一样:
编写一个函数,给定一个列表和一个目标和,返回任何两个不同元素的从零开始的索引,这两个元素的总和等于目标总和.如果没有这样的元素,则该函数应返回null. 例如,FindTwoSum(new List(){1,3,5,7,9},12)应该返回以下任何索引元组: 1,4(3 9 = 12) 2,3(5 7 = 12) 3,2(7 5 = 12) 4,1(9 3 = 12) 这是我到目前为止所做的 public static Tuple<int,int> FindTwoSum(List<int> list,int sum) { List<Tuple<int,int>> ListOfInt = new List<Tuple<int,int>>(); for (int i=0; i<list.Count; i++) { for(int j=0; j<list.Count; j++) { if (list[i] + list[j] == sum) { ListOfInt.Add(new Tuple<int,int>(i,j)); } } } foreach ( var elemt in ListOfInt) { return elemt; } return null; } 问题是找到所有结果并保存在元组中:但我仍然无法将结果打印到控制台.我认为foreach的陈述有些不对劲. Console.WriteLine(FindTwoSum(new List<int>() { 1,9 },12)); 请问任何建议:)? 解决方法
好吧,如果b = sum然后b a = sum,那么你可以切割内环并立即返回两对;您当前实现的另一个问题和反例是a = sum不计算,例如
{3,6,12 应该只返回 0,2 // 3 + 9 2,0 // 9 + 3 并不是 1,1 // 6 + 6 is wrong 我宁愿实现返回IEnumerable< Tuple< int,int>>的解决方案: // Are you given List<int>? What about int[]? IEnumerable<int> is a much better choice public static IEnumerable<Tuple<int,int>> FindTwoSum(IEnumerable<int> items,int sum) { // Validate Arguments (the method is public one!) if (null == items) throw new ArgumentNullException("items"); var list = items.ToList(); for (int i = 0; i < list.Count - 1; ++i) // last line doesn't count for (int j = i + 1; j < list.Count; ++j) // note j = i + 1 // if ((list[i] + list[j] == sum) && (list[i] != list[j])) { // distinct values and indexes if (list[i] + list[j] == sum) { // distinct indexes only yield return new Tuple<int,j); yield return new Tuple<int,int>(j,i); } } 如果你想要不同的值以及不同的索引而不是 if (list[i] + list[j] == sum) 应该 if ((list[i] + list[j] == sum) && (list[i] != list[j])) 不同的值,但不是索引不是一种情况,因为a [i] == a [i]所以只要索引不区分值.我们有条件 if ((list[i] + list[j] == sum) && (list[i] != list[j])) 测试: // note that I can pass an array (int[]) or list (List<int>) whatever collection String report = String.Join(Environment.NewLine,FindTwoSum(new int[] { 1,12)); // (1,4) // (4,1) // (2,3) // (3,2) Console.Write(report); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |