当前位置: 首页 > 知识库问答 >
问题:

二和问题-Python。请解释一下解决办法,我觉得没道理

堵雅健
2023-03-14

两个和给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。

您可以假设每个输入都有一个精确的解决方案并且您可能不会使用相同的元素两次

示例:

给定Nums=[2, 7, 11, 15],目标=9,

因为nums[0]nums[1]=27=9,所以返回[0,1]。

解决方案:

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        h = {}
        for i, num in enumerate(nums):
            n = target - num
            if n not in h:
                h[num] = i
            else:
                return [h[n], i]

这对我来说毫无意义,请有人解释一下它是如何工作的?

共有2个答案

徐卓
2023-03-14

你要求列表中的每个数字“是否已经有数字,我会添加到我等于目标?”。如果有,你有在'i'索引的当前数和在h[number_that_results_in_number__current_number_equals_target]你会得到该数的索引

H告诉你你需要和那个数字的索引数相加的数字。所以:

>

h有7个吗?(为什么是7?因为只有7,我才能用2来产生9的和。)不,把2放在那里,它的索引(例如,“2”的索引是0)。(我不把7放在那里,因为我不知道列表中是否有7。我所知道的是,在列表中的位置0上有一个2。)

现在我有7个。

9-7是2。对我来说(7)我需要知道,以前列表中是否有第二个。如果是,在哪里?

h里有2吗?

是的,有,它有索引0,我的索引(7)是1。

不确定这是否有帮助。

编辑:这是两个处理过的数字(2和7)后变量的样子:

i   0
num 2
n   7
h {2: 0}
i   1
num 7
n   2
[0, 1(thats i for 7)]

EDIT2:想象一下,我们在nums中会有不同的顺序[2,11,15,7]:

i   0
num 2
n   7             # is value 7 in h? no, add current number and its index == 2: 0
h {2: 0}
--------------- # iteration of loop 
i   1
num 11
n   -2            # is value -2 in h? no, add current number and its index
h {2: 0, 11: 1(that is i for 11)}
---------------
i   2
num 15
n   -6            # is value -6 in h? no, add current value and its index
h {2: 0, 11: 1, 15: 2}
---------------
i   3
num 7
n   2             # is value 2 in h? yes, its index is 0, see h {2: 0...
returned value [0 (thats i for 2), 3 (thats i for 7)]

为什么我们要问“h中的值为-2”表示值11?因为只有使用-2,我们才能从值11得到和9(其他值也是如此)

薛华奥
2023-03-14

我将用C程序解释。和它很相似。

采用大小(N)等于“nums”中最大元素数组“arr”。这里是15。然而,索引开始于0,所以我们将考虑n=16。用0初始化每个元素。

现在,将'nums'从0迭代到'nums'数组的长度,并用1更新'arr'的位置。

for(int k = 0; k < nums_length; k++) {
    arr[num[k]] = 1;
}

现在将“arr”从0迭代到N。在“arr”为1的位置,即如果我们有一个来自“nums”的有效元素,请检查是否也存在互补元素。

例如,假设i=0,然后arr[num[0]]=arr[2]。在arr中,我们有2,也就是说,2是Nums数组中的有效条目。现在,找到互补的,即目标-2或9-2=7。现在检查7是否是数字数组中的有效条目。我们看到arr[7]==1。这意味着,7存在。

我们现在需要找到指数7。因此,将其存储在变量中,并迭代“Nums”数组以找到其索引。

代码片段如下所示:

for(int i = 0; i < N; i++) {
    if(arr[num[i]] == 1) {
        complement = abs(target - num[i]);
        if(arr[complement] == 1) {
            x = i;
            break;
        }
    }
}         
for(int j = 0; j < N; j++) {
    if(arr[j] == complement) {
        y = j;
        break;    
    }            
}
cout << x << y;
 类似资料:
  • 问题内容: 我已经阅读了数百篇有关Java中“ this”的解释,但是我真的很难理解它。我正在并行学习android和java,我知道这样做比较难,但是我很喜欢。我被杀死的一件事是“ this”。我正在粘贴下面一次使用“ this”的教程中的代码。我本打算只编写一段代码,但希望尽可能提供帮助。 我正在寻找可以添加到笔记中的“ this”的良好解释。任何和所有帮助表示赞赏。提前致谢。 示例代码从下面

  • 本文向大家介绍请你谈一下,你觉得应该如何解决Facebook假新闻问题呢?相关面试题,主要包含被问及请你谈一下,你觉得应该如何解决Facebook假新闻问题呢?时的应答技巧和注意事项,需要的朋友参考一下 引入机器学习机制,使用AI来衡量信息及信息源的质量,全方位审核。 AI 标记剽窃的文本、可疑的广告以及恶意针对其他用户的信息。因为这些信息一般会在不同的域名以不同的形式发布,一旦有一个虚假新闻被揭

  • 如果configure程序没有找到MySQL 的头文件和库文件, 请试试检查是否安装了mysql-devel或者mysql-client依赖包. 在有些系统上,默认安装包括这个包. 类似如此,libiconv等也可能会有类似的提示。 如果make程序给出如下错误提示 /bin/sh: g++: command not found make[1]: *** [libsphinx_a-sphinx.o

  • 本文向大家介绍请解释一下TreeMap?相关面试题,主要包含被问及请解释一下TreeMap?时的应答技巧和注意事项,需要的朋友参考一下 考察点:key-value集合 TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)的 NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator进行排序,具体取决于使用的

  • 本文向大家介绍Windows7下获得System权限问题解决方法,包括了Windows7下获得System权限问题解决方法的使用技巧和注意事项,需要的朋友参考一下 Windows7下MS加强了权限的问题,但这个神秘的无处不在的system居然比administrator还大而又不能登录实在是让人不能理解,特别是很多的目录居然都要system的权限才能删除,真是让人头痛。 下面有一个脚本,可以在得到

  • 本文向大家介绍C# SESSION丢失问题的解决办法,包括了C# SESSION丢失问题的解决办法的使用技巧和注意事项,需要的朋友参考一下 我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失。下面就是Session数据丢失的解决办法希望对您有好处。 1、在WEB.CONFIG文件中修改SESSION状态保存模式,如:<sessionState mode='StateServe