开发工具与关键技术: 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的情况.
}
}