两数之和算法(C#)
两数之和算法(C#)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 103
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
1 using System;
2
3 namespace ConsoleApp3
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 int[] arr = new int[2];
10
11 Program program = new Program();
12 int[] numbers = new int[] { 1, 2, 3,4,16,6,7,8,100};
13 arr = program.TwoSum(numbers, 101);
14 }
15 public int[] TwoSum(int[] nums, int target)
16 {
17 int i = 0, t = 0;
18 int[] array = new int[2];
19 bool isGet = false;
20 while (i < nums.Length)
21 {
22 //①判断是否重复,且 t 不能是数组最后一位数的数组下标,否则会因为t+=1,而超过数组合法范围
23 if (i == t && t != nums.Length - 1)
24 {
25 t += 1;
26 continue;
27 }
28 if (nums[i] + nums[t] == target)
29 {
30 //因为①,所以 在i与t在数组最后一位交汇时,会重复,所以直接跳过,因为我们不取重复值,因为是在数组的末尾处交汇,后面已经没有需要尝试的 数 了,所以大胆直接跳过循环
31 if (i == t && i == nums.Length - 1 && t == nums.Length - 1)
32 break;
33 isGet = true;
34 array[0] = i;
35 array[1] = t;
36 Console.WriteLine("[{0},{1}]", i, t);
37 break;
38 }
39 else
40 {
41 if (t == nums.Length - 1)
42 {
43 i += 1;
44 t = 0;
45 continue;
46 }
47 t += 1;
48 }
49 }
50 if(isGet == false)
51 Console.WriteLine("The right number was not found.");
52 return array;
53 }
54 }
55 }
posted on 2021-03-06 22:15 CeruleanXpsc 阅读(900) 评论(0) 编辑 收藏 举报