服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#算法之两数之和

C#算法之两数之和

2022-12-20 14:39痴者工良 C#

这篇文章介绍了C#算法之两数之和,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

题目

给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

提示:不能自身相加。

测试用例

[2,7,11,15]

9

预期结果

[0,1]

 格式模板

?
1
2
3
4
5
6
7
public class Solution {
    public int[] TwoSum(int[] nums, int target) {
    /*
    代码
    */
        }
    }

笔者的代码,仅供参考

使用暴力方法,运行时间 700ms-1100ms

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Solution {
    public int[] TwoSum(int[] nums, int target) {
         int [] a = new int[2];
            for (int i = 0; i < nums.Length - 1; i++)
            {
                for (int j = i + 1; j < nums.Length; j++)
                {
                    if (nums[i] + nums[j] == target)
                    {
                        a[0] = i;
                        a[1] = j;
                    }
                }
            }
            return a;
        }
    }

运行时间 400ms-600ms

由于使用的是哈希表,所以缺点是键不能相同。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Solution {
    public int[] TwoSum(int[] nums, int target) {
                     int[] a = new int[2];
            System.Collections.Hashtable hashtable = new System.Collections.Hashtable();
            for(int i = 0; i < nums.Length; i++)
            {
                hashtable.Add(nums[i], i);
            }
            for(int i = 0; i < nums.Length; i++)
            {
                int complement = target - nums[i];
                if (hashtable.ContainsKey(complement) && int.Parse(hashtable[complement].ToString())!=i)
                {
                    a[0] = i;
                    a[1] = int.Parse(hashtable[complement].ToString());
                }
            }
            return a;
        }
    }

还是哈希表,缺点是哈希表存储的类型是object,获取值时需要进行转换。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int[] TwoSum(int[] nums, int target)
{
    int[] a = new int[2];
    System.Collections.Hashtable h = new System.Collections.Hashtable();
    for (int i = 0; i < nums.Length; i++)
    {
        int c = target - nums[i];
        if (h.ContainsKey(c))
        {
            a[0] = int.Parse(h[c].ToString()) <= nums[i] ? int.Parse(h[c].ToString()) : i;
            a[1] = int.Parse(h[c].ToString()) > nums[i] ? int.Parse(h[c].ToString()) : i;
        }
        else if (!h.ContainsKey(nums[i]))
        {
            h.Add(nums[i], i);
        }
    }
    return a;
}

抄一下别人的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Solution
{
    public int[] TwoSum(int[] nums, int target)
    {
        int[] res = {0, 0};
        int len = nums.Length;
        Dictionary<int, int> dict = new Dictionary<int, int>();
        for (int i = 0; i < len; i++)
        {
            int query = target - nums[i];
            if (dict.ContainsKey(query))
            {
                int min = (i <= dict[query]) ? i : dict[query];
                int max = (i <= dict[query]) ? dict[query] : i;
                return new int[] { min, max };
            }
            else if (!dict.ContainsKey(nums[i]))
            {
                dict.Add(nums[i], i);
            }
        }
 
        return res;
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/whuanle/p/10342416.html

延伸 · 阅读

精彩推荐
  • C#C#二维码图片识别代码

    C#二维码图片识别代码

    这篇文章主要为大家详细介绍了C#二维码图片识别代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    志在必得Shaun10112022-02-24
  • C#Unity实现虚拟摇杆效果

    Unity实现虚拟摇杆效果

    这篇文章主要为大家详细介绍了Unity实现虚拟摇杆效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    糟糕点师7542022-08-31
  • C#C#实现谷歌翻译API示例代码

    C#实现谷歌翻译API示例代码

    本篇文章主要介绍了C#实现谷歌翻译API示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    marso11112022-01-07
  • C#学习Winform分组类控件(Panel、groupBox、TabControl)

    学习Winform分组类控件(Panel、groupBox、TabControl)

    这篇文章主要和大家一起学习Winform分组类控件,包括容器控件(Panel),分组框控件(groupBox)和选项卡控件(TabControl)等控件,感兴趣的小伙伴们可以参考一下...

    丿木呈广予口贝4782021-11-22
  • C#C#与PHP的md5计算结果不同的解决方法

    C#与PHP的md5计算结果不同的解决方法

    今天在用C#接入我的登录api发现了一个问题,登陆的时候无论如何都会出现用户名和密码错误的问题,后来通过查找排除找的了问题的原因是因为C#与PHP的...

    ifengge3712021-12-15
  • C#详解Unity地面检测方案

    详解Unity地面检测方案

    本文主要介绍了Unity地面检测方案,感兴趣的同学,可以参考下,并且亲自实验一下。...

    zhxmdefj10652022-11-21
  • C#C# Datatable的几种用法小结

    C# Datatable的几种用法小结

    这篇文章主要介绍了C# Datatable的几种用法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    锋璠11362022-10-28
  • C#c# BackgroundWorker使用方法

    c# BackgroundWorker使用方法

    这篇文章主要介绍了c# BackgroundWorker使用方法,文中代码非常详细,帮助大家更好的参考学习,感兴趣的朋友可以了解下...

    风情单车5952022-09-09