来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
// 暴力循环 时间复杂度:O(n*n) 空间复杂度:O(1) public static int []SumByDoubleNum(int[]num, int target) { for (int i = 0; i < num.Length; i++) { for (int j= i+1; j<num.Length; j++) { if (num[i] + num[j] == target) { return new int[] { i, j }; } } } return new int[] {0,0 }; } //哈希表 时间复杂度:O(n) 空间复杂度:O(n) 空间换时间 public static int[] SumByDoubleNum1(int[] num, int target) { Dictionary<int, int> dic = new Dictionary<int, int>(); for (int i = 0; i < num.Count(); i++) { int complement = target - num[i]; if (dic.ContainsKey(complement) && dic[complement] != 1) { return new int[] { i, dic[complement] }; } if (!dic.ContainsKey(num[i])) { dic.Add(num[i], i); } } return new int[] { 0,0}; }
原文:https://www.cnblogs.com/amazing-ld/p/13216725.html