剑指offer3

本文介绍三种查找数组中重复数字的方法:使用哈希表、排序和抽屉原理。通过实例代码展示了每种方法的具体实现,帮助读者理解不同算法的特点。

我的想法先排序,再建立一个哈希表,如果大于1,那就返回

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int last=nums[nums.size()-1];
        vector<int> num(last+1);
        for(int i=0;i<num.size();i++){
            num[i]=0;
        }
        for(int i=0;i<num.size();i++){
            num[nums[i]]=num[nums[i]]+1;
        }
        for(int i=0;i<num.size();i++){
            if(num[i]>1){
                return i;
            }
        }
        return 0;
    }                                                                                           
};

别人:
方法1:哈希表。

int findRepeatNumber(vector<int>& nums) {
        unordered_map<int,int> mp;//空的哈希表
        for(int i=0;i<nums.size();i++){
            if(mp.find(nums[i]) != mp.end()) return nums[i];//查看元素是不是在哈希表里面是返回
            else mp[nums[i]] ++;//不在哈希表里面就把这个元素的位置加一
        }
        return -1;
    }

方法2.排序

int findRepeatNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        for(int i=1;i<nums.size();i++){
            if(nums[i-1] == nums[i]) return nums[i];//相邻两个元素是不是相同,相同就返回
        }
        return -1;
    }

方法3.抽屉原理。如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。
因为出现的元素值 < nums.size(); 所以我们可以将见到的元素 放到索引的位置,如果交换时,发现索引处已存在该元素,则重复 O(N) 空间O(1)

int findRepeatNumber(vector<int>& nums) {
        for(int i=0;i<nums.size();i++){
            while(nums[i]!=i){ //不相等[1,2,2],一个一个向后找,想让在第0个位置上的数是0,第1个位置上的数字是1,第二个位置上的数字是2,nums[i](1)是要和nums[nums[i]](2)交换的
                if(nums[nums[i]] == nums[i]) return nums[i];//判断,如果原来位置上就有一个和位置一样的数字了比如说nums[2]=2 nums[nums[2]]=2说明重复了,返回这个值
                int tmp = nums[i];
                nums[i] = nums[tmp];//否则就进行交换。将nums的数字都挪动到数字对应的位置上
                nums[tmp] = tmp;
            }
        }
        return -1;
    }
【评估多目标跟踪方法】9个高度敏捷目标在编队中的轨迹和测量研究(Matlab代码实现)内容概要:本文围绕“评估多目标跟踪方法”,重点研究9个高度敏捷目标在编队飞行中的轨迹生成与测量过程,并提供完整的Matlab代码实现。文中详细模拟了目标的动态行为、运动约束及编队结构,通过仿真获取目标的状态信息与观测数据,用于验证和比较不同多目标跟踪算法的性能。研究内容涵盖轨迹建模、噪声处理、传感器测量模拟以及数据可视化等关键技术环节,旨在为雷达、无人机编队、自动驾驶等领域的多目标跟踪系统提供可复现的测试基准。; 适合人群:具备一定Matlab编程基础,从事控制工程、自动化、航空航天、智能交通或人工智能等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于多目标跟踪算法(如卡尔曼滤波、粒子滤波、GM-CPHD等)的性能评估与对比实验;②作为无人机编队、空中交通监控等应用场景下的轨迹仿真与传感器数据分析的教学与研究平台;③支持对高度机动目标在复杂编队下的可观测性与跟踪精度进行深入分析。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注轨迹生成逻辑与测量模型构建部分,可通过修改目标数量、运动参数或噪声水平来拓展实验场景,进一步提升对多目标跟踪系统设计与评估的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值