算法#21--两数求和

来源:互联网 发布:小米手环数据修改 编辑:程序博客网 时间:2024/05/01 23:49

给定一个整数数组,返回两个数的指数,他们之和等于给定的目标值。

例如:

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

如下是网上给的时间在O(n),击败了97.82%答案:

public class Solution {    public int[] TwoSum(int[] nums, int target) {        int len = nums.Length;        int[] a = new int[2];        Dictionary<int,int> hash = new Dictionary<int,int>();        for (int i=0;i<len;i++) {            int complement = target - nums[i];            if (hash.ContainsKey(complement)) {                a[0]=i;                a[1]=hash[complement];                return a;            }            else {                if (!hash.ContainsKey(nums[i]))                    hash.Add(nums[i],i);            }        }        return a;    }}

但是它只找出了一组值就return了,如果有两组以上,求不适用。如输入:{ 1, 2, 4, 5, 6, 7, 0 , -1},目标值6.所以我优化了,给出了如下答案:

public class Solution    {        public static int[] TwoSum(int[] nums, int target)        {            int[] data = new int[nums.Length];            int index = 0;            Dictionary<int, int> dic = new Dictionary<int, int>();            for (int i = 0; i < nums.Length; i++)            {                int temp = target - nums[i];                if (dic.ContainsKey(temp))                {                    data[index++] = dic[temp];                    data[index++] = i;                                    }                else                {                    if (!dic.ContainsKey(nums[i]))                        dic.Add(nums[i], i);                }            }            if (index == 0)            {                return null;            }            int[] returnData = new int[index];            for (int i = 0; i < index; i++)            {                returnData[i] = data[i];            }            return returnData;        }    }
0 0
原创粉丝点击