首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按索引交换列表中的值

按索引交换列表中的值
EN

Stack Overflow用户
提问于 2021-07-12 06:16:07
回答 1查看 348关注 0票数 0

我在列表中遇到了一个交换值的问题,使用索引作为占位符来跟踪出现了哪些正整数。

问题就在这里(来自Leetcode)

给定一个未排序的整数数组,查找丢失的最小正整数。 您必须实现一个在O(n)时间内运行并使用常量额外空间的算法。 投入: nums = 3,4,-1,1 产出:2 示例3

我最初的做法是:

代码语言:javascript
复制
for i in range(len(arr)):
    while arr[i] > 0 and len(arr) > arr[i] and i != arr[i]-1 and arr[i] != arr[arr[i]-1]:
        print('swapping to index ' +  str(i) + ' value ' + str(arr[arr[i] - 1]))
        print('swapping to index ' + str(arr[i]-1) + ' value ' + str(arr[i]))
        arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]
        print(arr)

但这产生了以下结果:

代码语言:javascript
复制
swapping to index 0 value -1
swapping to index 2 value 3
[-1, 4, 3, 1]
swapping to index 3 value -1
swapping to index 0 value 1
**[-1, 4, 1, -1]** (??)

但是,如果我设置一个变量j = arr[i] - 1并运行相同的代码

代码语言:javascript
复制
for i in range(len(arr)):
    while arr[i] > 0 and len(arr) > arr[i] and i != arr[i]-1 and arr[i] != arr[arr[i]-1]:
        j = arr[i] - 1
        print('swapping to index ' +  str(i) + ' value ' + str(arr[j]))
        print('swapping to index ' + str(j) + ' value ' + str(arr[i]))
        arr[i], arr[j] = arr[j], arr[i]
        print(arr)

这个互换是正确的

代码语言:javascript
复制
swapping to index 0 value -1
swapping to index 2 value 3
[-1, 4, 3, 1]
swapping to index 3 value -1
swapping to index 0 value 1
[1, 4, 3, -1] (as intended)

有人能给我解释一下吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-12 07:58:13

当您交换值时

代码语言:javascript
复制
arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i]

然后它运行如下

代码语言:javascript
复制
variable = arr[arr[i] - 1], arr[i]
arr[i], arr[arr[i] - 1] = variable

但是在第二行,它仍然必须赋值one by one,并且首先它将赋值

代码语言:javascript
复制
arr[i] = ...

以及以后的

代码语言:javascript
复制
arr[arr[i] - 1] = ...

但是当它分配第二个值时,arr[i]已经有了新的值而不是旧的值--这就产生了问题。

当你使用j = arr[i] - 1

代码语言:javascript
复制
arr[j] = ...

然后j有所有的时间旧值- ant,然后它正确地工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68342675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档