【LeetCode系列】Leet Code OJ 442. Find All Duplicates in an Array [Difficulty:Middle]

题目链接

这个题目,如果可以用空间复杂度O(n)的话,就是直接哈希表或者桶排序,如果要求时间复杂度O(nlogn)的话,那就直接排序好了,比如快速排序,归并排序或者堆排序。

但是,如果要求时间复杂度为O(n)又不创建任何空间的话,又该怎么办?

这时候,仔细看题就会发现:

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

题目的数据,数据范围是[1,n],那么原本数组长度就是n,要实现低时间复杂度的话,不如用修改原本数组的方式来实现。

比如说对于数据:

[【4】,3,2,7,8,2,3,1]

现在,i在起始点,Key = nums[i],就是4,那么我们把它和4这个位置替换一下

就变成了 [【7】,3,2,4,8,2,3,1]

然后这时候的值是7,同样的我们进行替换

[【3】,3,2,4,8,2,7,1]

[【2】,3,3,4,8,2,7,1]

[【3】,2,3,4,8,2,7,1]

这时候,key的值是3,但是nums[key]的值也是3,那么就代表3重复了,加进res数组中,然后把key置零,i往后移动

[0,2,3,4,8,2,7,1]

如果nums[i] = i + 1的话就继续往后移动,直到i为5时,key是8

[0,2,3,4,【8】,2,7,1]

[0,2,3,4,【1】,2,7,8]

[1,2,3,4,【0】,2,7,8]

这时候没有遇到什么重复 的情况,res不变,i继续往后移动,

[1,2,3,4,0,【2】,7,8]

因为2的位置已经是2了,因此,把2加入res数组,置零,i往后移动

[1,2,3,4,0,0,7,8]

这样就得到res的结果是[3,2](不用考虑顺序)

class Solution:
    def findDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        le = len(nums)
        res = []
        for i in range(le):
            if nums[i] - 1 == i: continue
            key = nums[i]
            while nums[key - 1] != key:
                tmp = nums[key - 1]
                nums[key - 1] = key
                nums[i] = tmp
                key = nums[i]
                if tmp == 0: break

            if nums[key - 1 ] == key and key - 1 != i and nums[i] != 0:
                res.append(key)
                nums[i] = 0
        return res

 

基于MMSkeleton工具包中的ST-GCN模型实现一种基于动态拓扑图的人体骨架动作识别算法python源码+使用说明.zip 改进ST-GCN模型的骨架拓扑图构建部分,使用持续学习思想动态构建人体骨架拓扑图. 将具有多关系特性的人体骨架序列数据重新编码为关系三元组, 并基于长短期记忆网络, 通过解耦合的方式学习特征嵌入. 当处理新骨架关系三元组时, 使用部分更新机制 动态构建人体骨架拓扑图, 将拓扑图送入ST-GCN进行动作识别。 运行MMSKeleton工具包参考[GETTING_STARTED.md](./doc/GETTING_STARTED.md) - 单独使用ST-GCN模型进行人体动作识别参考[START_RECOGNITION.md](./doc/START_RECOGNITION.md) - 训练基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/test_lifelong_model.py ``` - 测试基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/train_lifelong_model.py ``` - 可视化算法运行结果 基于web server搭建前端 [[参考]](https://blog.csdn.net/gzq0723/article/details/113488110) 1、前端模块:包含 'static与'templates'文件夹为界面展示相关的代码。 templates里面包含了两个html的结构文档,用来定义浏览器的显示界面。 static里面的css和img用来修饰界面。 2、服务模块: servel.py里面是web服务的一个业务逻辑。 运行算法性能可视化web服务 ``` shell cd DTG-SHR python ./server.py ``` 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值