LeetCode-001.Tow Sum

xiaoxiao2021-02-28  18

1. 两数之和

Given an array of integers, return indices of the two numbers such that they add up to a specific target. 给定一个整数数列,找出其中和为特定值的那两个数。

You may assume that each input would have exactly one solution, and you may not use the same element twice. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用。 示例:

Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].

Soultion

using System; using System.Collections.Generic; public class Solution { public int[] TwoSum(int[] nums, int target) { int[] resultIndexs = new int[2];//需要先指定数量!!! if(nums.Length == 0){ return resultIndexs; } Dictionary<int, List<int>> numsDictionary = new Dictionary<int, List<int>>(); int length = nums.Length; for(int i = 0; i < length; i++){ if(!numsDictionary.ContainsKey(nums[i])){//如果不存在该元素 numsDictionary.Add(nums[i],new List<int>()); } numsDictionary[nums[i]].Add(i); } //开始查找是否有两数的和 foreach(var tempNumber in numsDictionary.Keys){//注意>>Keys<< //if(tempNumber > target) continue; 题目的前提是都存在!!!而且正负数都有可能出现,不能惯性思维 int leftNumber = target - tempNumber; if(leftNumber != tempNumber){//如果两个数不相等 if(numsDictionary.ContainsKey(leftNumber)){//注意>>ContainsKey<< resultIndexs[0] = numsDictionary[tempNumber][0]; resultIndexs[1] = numsDictionary[leftNumber][0]; return resultIndexs; } } else{//如果两个数相等 if(numsDictionary[tempNumber].Count >= 2){ resultIndexs[0] = numsDictionary[tempNumber][0]; resultIndexs[1] = numsDictionary[tempNumber][1]; return resultIndexs; } } } return resultIndexs; } }
转载请注明原文地址: https://www.6miu.com/read-2628823.html

最新回复(0)