欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode-001.Tow Sum

程序员文章站 2024-02-29 10:55:22
...

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;
    }
}