LeetCode-两数之和-TwoSum

这学期一直,没更新博客,一是因为这学期的java课太水了,根本没有写的必要,二是这学期写的最多的代码是verilog,因为我选的计组老师是安建峰,他每次留的大作业我都尽力完成了,确实对充分理解mips处理器有很大帮助,可能过几天我就会把计组的东西发上来,也算留个念吧。

这转眼都该大三了,其实还是有些彷徨的,并不知道自己到底要干些什么,舍友校内获了一堆奖,而我却一个都没有,虽然以后想从事游戏方面的工作,但是却找不到努力的方向,所以想着暑假刷点题,充实一下自己。

看下题吧,第一道:

首先想到的肯定是写两个循环,但是其实还有其他的办法,可以利用dictionary的键值对来解决。

题中所述“每种输入只会对应一个答案”说明答案是唯一的,不会出现【3,3,4】,7的这种情况。

体重所述“你不能重复利用这个数组中同样的元素”说明【3,4】,6的情况时是没有结果的,因为0号位置的值不可以用两次,而【3,3,4】,6是有结果的。

利用键值对,通过值来查找下标,可以快速的得到所需值得下标,而不用循环查找。

public class Solution {
        public int[] TwoSum(int[] nums, int target)
        {
            Dictionary<int, int> dictionary = new Dictionary<int, int>();
            for (int i = 0; i < nums.Length; i++)
            {
                int key = target - nums[i];//计算要查找的key值
                if (dictionary.ContainsKey(key))//如果字典里有,说明以前存进的其中一个和将要存进的的和为target
                {
                    return new int[] { dictionary[key], i };//存在就返回
                }
                else
                {
                    dictionary[nums[i]] = i;//不存在就存入
                }
            }
            throw new Exception("Do not have the right result.");
        }
}

我第一次写的时候是先存入dictionary,再查找,为了避免出现键重复的情况,值我使用了list。但是其实是可以向上面一样边存边找的,因为结果是唯一的,这样就可以节省一些时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值