LeetCode-001.Tow Sum

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值