【LeetCode算法 - C#】1.两数之和

开发工具与关键技术: C#
作者:奶糖不甜
撰写时间:2022.2.27
C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

题目描述:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9。因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]。

最暴力解法:

面对数组中求数的题目,唯有遍历是唯一正解,也就是说跳不出遍历这一环节。暴力解法从字面意思上诠释此解法并不做过多思考,以最为基础,简洁,不考虑时间复杂度和空间复杂度种种因素的前提下进行求解。

首先看到从数组中寻找两个整数,并相加将和与目标值对比,直接使用for循环进行遍历暴力穷举,寻求所有的答案然后进行对比:

/*两数之和Csharp最简解法*/
public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        for(int i = 0; i < nums.Length; i++)
        {//定义第一个循环.
            for(int j = i+1; j < nums.Length; j++)
            {//定义第二个循环,得出所有答案,在得到正确答案进行return输出.
                if(nums[i] + nums[j] == target)
                {//判断正确答案,输出.
                    return new int[]{i, j};
                }
            }
        }
        throw new System.Exception("Failure");//无法找到正确答案的错误输出.
    }
}

:由于题目本身并没有无解的输出结果,但因语法需要,故最后添加错误输出。

哈希表解法:

依旧用for循环进行遍历,每次循环都将查找Dictionary里是否存在与nums[ i ]相加后等于target的值,如果存在直接返回下标;如果不存在则将nums[ i ]的下标和值存入Dictionary里:

/*两数之和Csharp哈希表解法*/
public class Solution 
{
    public int[] TwoSum(int[] nums, int target) 
    {
        Dictionary<int, int> twosum = new Dictionary<int, int>();
        //定义哈希表twosum.
        for(int i = 0;i < nums.Length;i++)
        {//定义for循环进行遍历.
            if(twosum.ContainsKey(target - nums[i]))
            {//判断Dictionary中是否存在,不存在则存入,存在则进行return输出.
                return new int[] {twosum[target - nums[i]], i};
            }
            else
            {
                twosum[nums[i]] = i;
            }
        }
        return new int[] {0, 0};//结果为null的情况.
    }
}

你可能感兴趣的:(【LeetCode算法,-,C#】,leetcode,算法,c#)