剑指Offer——数组中重复的数字

【leetcode】剑指offer03 ---数组中重复的数字(C++) 数组中重复的数字3种解法数组中重复的数字 数组中重复的数字 题目链接:https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ 题解一:排序+遍历数组 代码如下: class Solution { public: int findRepeatNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); f 阅读详情

题目描述:在一个长度为n的数组里所有数字都在0~n-1范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

分析:

解法一:先排序,再找出重复的数字,可以找出所有重复的数字。

代码如下:

public sealed class SortAndFind
    {
        //快排的单元排序
        private static int SortInit(int[] arr, int low, int high)
        {
            int key = arr[low];
            while (low < high)
            {
                while (arr[high] >= key && high > low)
                    high--;
                arr[low] = arr[high];
                while (arr[low] <= key && low < high)
                    low++;
                arr[high] = arr[low];
            }
            arr[low] = key;
            return low;
        }
        //快排
        private static void QuickSort(int[] arr, int low, int high)
        {
            if (low >= high)
                return;
            int index = SortInit(arr, low, high);
            QuickSort(arr, low, index - 1);
            QuickSort(arr, index + 1, high);
        }
        //找出所有重复的数字
        public static int[] FindRepeatNums(int[] arr)
        {
            List<int> temp = new List<int>();
            QuickSort(arr, 0, arr.Length - 1);
            foreach (int item in arr)
            {
                Console.Write("{0} ", item);
            }
            Console.WriteLine();
            for (int i = 0; i < arr.Length - 1; i++)
            {
                if (arr[i] != arr[i + 1])
                    continue;
                while (arr[i] == arr[i + 1] && i < arr.Length - 2)
                {
                    i++;
                }
                temp.Add(arr[i]);
            }
            int[] result = temp.ToArray();
            return result;
        }
    }

解法二:使用字典存储值和值的数量,可以找出所有重复的数字。

代码如下:

public sealed class DictionaryAndFind
    {
        public static void Find(int[] arr)
        {
            Dictionary<int, int> dictionary = new Dictionary<int, int>();
            for (int i=0;i<arr.Length;i++)
            {
                if (!dictionary.ContainsKey(arr[i]))
                    dictionary.Add(arr[i], 1);
                else
                    dictionary[arr[i]] += 1;
            }
            int[] keys = dictionary.Keys.ToArray();
            for(int j = 0;j<keys.Length;j++)
            {
                if (dictionary[keys[j]] > 1)
                    Console.Write("{0} ", keys[j]);
            }
        }
    }

解法三:仔细分析题目,所有数字都在0~n-1范围内,抓住这个条件,我们可以想假如没有重复的数会怎么样?排好序的话下标与值相等,根据这个来解。假如值等于下标,则往后扫描,否则,先与下标为该值的值比较,若相等,则找到了重复的数,否则,交换两个数。一边排序,一边找重复的数。

代码如下:

public sealed class ChangeAndFind
    {
        public static int FindOneRepeat(int[] arr)
        {
            if (arr == null || arr.Length <= 0)
                return -1;
            for(int i=0;i<arr.Length;i++)
            {
                if (arr[i] < 0 || arr[i] > arr.Length - 1)
                    return -1;
            }
            int one = 0;
            for(int i=0;i<arr.Length;i++)
            {
                while(arr[i]!=i)
                {
                    int temp = arr[i];
                    if (arr[i] == arr[temp])
                    {
                        one = arr[i];
                        return one;
                    }
                    arr[i] = arr[temp];
                    arr[temp] = temp;
                }
            }
            return one;
        }
    }
总结:要仔细分析题目,从而找出最优解。
EasyAR实现AR红包的关键代码 立即下载

相关推荐

CRC校验查表法详解

CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m

boom的博客 1万+

3.24_448. 数组_统计数组中的元素_找到所有数组中消失的数字(easy)

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] class Solution: def findDisappearedNumbers(self, nums: Lis

sheryood的博客 316

从Bit到MCS:深度解析Xilinx FPGA程序固化流程与文件选型

本文深度解析Xilinx FPGA程序从调试到量产的固化流程,重点对比BIT、BIN、MCS和ELF四种文件格式的特性与适用场景。针对工业级应用,详细讲解MCS文件的生成优化、Flash烧录避坑指南及三级验证流程,并分享多镜像管理、加密安全等高级技巧,帮助开发者提升FPGA量产可靠性。

weixin_30924239的博客 324

easyar no matched package name

两处的包名要一致

m0_57178391的博客 988

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 796

强化学习 reward 曲线可视化:从基础绘制到顶刊级对比分析

本文详细介绍了强化学习reward曲线的可视化方法,从基础绘制到顶刊级对比分析。通过matplotlib和seaborn的实战示例,展示了如何优化曲线图的视觉效果,包括多实验对比、置信区间添加和分面图应用。文章还分享了顶刊级图表的进阶技巧,如字体排版、颜色选择和关键标注,帮助研究者提升论文图表质量。

weixin_29096377的博客 270

《剑指offer》003 数组中重复的数字

三种方法解决 数组中重复的数字

weixin_54042669的博客 391

YOLOv5/v7/v8首发革新改进——轻巧、创新的LADH检测头

本文介绍了一种原创改进的轻量化非对称多级压缩LADH检测头,该检测头能够实现即插即用,并在YOLOv5/v7/v8检测器中取得了显著的性能提升。本文将介绍一种原创改进的轻量级非对称多级压缩LADH(Lightweight Asymmetric Dual-Head)检测头,该检测头能够实现即插即用,并显著提升YOLO检测器的性能。因此,我们提出了一种非对称多级压缩的方法,即对不同类别的检测头采用不同的压缩比例。然而,为了进一步提高YOLO的性能,我们进行了一项原创改进,设计了一种轻巧且创新的LADH检测头。

IpyVariable的博客 2726

invalid Key or Package

使用EasyAR打包apk后出现invalid Key or Packag解决方案: 1.Bundle ID(IOS) 和 PackageName(Android) 填写的对不对  2.回头看Unity里面Player Setting 里面的名字可都和上面这个一致...

41814169的博客 1904

《八》:玩家位置同步(玩家防碰撞)

在VR大空间体验中,由于玩家佩戴头显设备无法直接观察彼此位置,容易发生碰撞。因此,需要将玩家的实时位置信息绘制在虚拟空间中,实现位置可视化。通过获取头显的位置和旋转角度等数据,可以推算出玩家的移动状态和位置。使用可序列化的玩家结构体,通过UDP将玩家数据发送到服务器,服务器接收并反序列化数据后,同步所有玩家的最新信息至各客户端。客户端根据接收到的数据渲染虚拟人物模型,实现动态位置更新。这一过程涉及数据序列化、反序列化、网络通信和实时渲染等技术,确保玩家在虚拟空间中的位置同步和可视化。

unitygroup的博客 413

[dprecated]第五章:TTM分析: 5.1 TTM设计目标和核心概念

TTM是Linux DRM框架下的通用显存管理模块,其复杂性源于需要满足多样化的显存管理需求。该文解析了TTM的核心结构体及其关系:ttm_device作为顶层管理者,包含多个ttm_resource_manager处理不同类型内存;ttm_buffer_object为核心对象,通过ttm_resource关联物理资源;其他组件如ttm_tt管理页表、ttm_pool优化分配效率。文章强调理解这些结构体关系是掌握TTM机制的基础,并建议国产芯片开发者参考这些功能需求。

图形/计算GPU的驱动与虚拟化技术分享园地 2121

[剑指Offer]数组中重复的数字(Java)

题目 数组中重复的数字 -- newcoder 剑指Offer 50 题目描述 * 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的, * 但不知道有几个数字是重复的。也不知道每个数字重复几次。 * 请找出数组中任意一个重复的数字。 * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出 * 是第一个重复的数字2。 思路 *...

聚沙成塔 615

【目标检测】IoU(交并比)详解及代码实现

1. IOU概述        IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。 2. IoU计算        IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实

Roaddd的博客 2万+

剑指Offer系列(java版,详细解析) 03. 数组中重复的数字

题目一 题目描述 剑指 Offer 03. 数组中重复的数字 难度简单 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 测试用例 长度为n的数组包含一个或多个重复的数字。 数组中不包含重复的数字。 无效输

Viper的程序员修炼手册 4588

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

剑指Offer03-数组中重复的数字

剑指Offer典型题整理 - 争取做最好的题解 剑指Offer03-数组中重复的数字 整理时间:2020年02月18日 题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 ...

哆啦A瑶的博客 654

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

剑指offer 数组中重复的数字

剑指offer题型分类及各题的代码及解题思路 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路1:哈希法 由于所有元素值是有范围的,因此可以用一个长...

请叫我皮皮虾的博客 554

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【剑指offer】数组中重复的数字

【剑指offer】数组中重复的数字

子夜的个人博客 1099

剑指offer系列——剑指 Offer 03. 数组中重复的数字(C语言)

⭐️前面的话⭐️ 大家好!博主开辟了一个新的专栏——剑指offer,我要开始刷题了!这个专栏会介绍《剑指offer》书上所有的面试编程题。并且会分享一些我的刷题心得。由于博主水平有限,如有错误,欢迎指正,如果有更好的解题思路和算法可以分享给博主哦!一起加油!一起努力!

未见花闻的博客 1229

剑指offer:数组中重复的数字

剑指offer:数组中重复的数字 题目一:找出数组中任意一个重复的数字 问题描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 输入输出 输入:[2,3,1,0,2,5,3] 输出:2或3 算法描述 方法一:预排序 + 扫描一遍 先把输入的数组排序。从排序的数值中找出重复的数字,只需要和相邻的数字进行比较是否相等,扫描一遍即可。 算法分析 时间复杂度:O(nlgn) 空间复杂度:O(

QWxixi的博客 316

【剑指Offer】数组中重复的数字

文章目录剑指Offer 03-数组中重复的数字一、题目描述二、问题分析1.遍历数组2.原地置换三、问题解决遍历数组原地置换 剑指Offer 03-数组中重复的数字 一、题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 二、问题分析 1.遍历数组 由于只需要找

居易 246

剑指 offer 面试题精选图解 03 . 数组中重复的数字

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字。 题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ 一、题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n...

程序员吴师兄的博客 548

剑指Offer03.数组中重复的数字 c++实现

剑指Offer03.数组中重复的数字 写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点 1. 使用集合 思路就是利用集合不能有重复数字的这个特性,把数组中的元素依次送入集合当中,判断一下这个元素是否被送入,如果已经被送入,那么返回该值,这样得到的是第一个重复的元素 class Solution { public: int findRepeatNumber(vector<int>& nums) { set<int>

y152543654的博客 496

【剑指Offer打卡】03. 数组中重复的数字

剑指Offer-03 数组中重复的数字 JavaScript剑指Offer题解 ????包含数组、对象、链表、堆栈、树等经典题型 ☕️每天一道,轻松不累 ????详细的题目解析,收藏方便阅读 在线阅读地址 在线阅读地址 题目描述 在一个长度为n的数组``nums`里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出: 2 或 3

余光的博客 464

剑指 Offer 03. 数组中重复的数字

找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 int findRepeatNumber(int* nums, int numsSize){ for (int i=0;i<numsSize;i++)

MortyC99430的博客 261

剑指offer—3.数组中重复的数字——分析及代码(Java)

剑指offer——3.数组中重复的数字——分析及代码[Java]一、题目二、分析及代码1.哈希表(1)思路(2)代码(3)结果2.原地交换(1)思路(2)代码(3)结果三、其他 一、题目 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。 请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的...

江南土豆的博客 279
上一篇: 剑指Offer——从尾到头打印链表
下一篇: 剑指Offer——不修改数组找出重复的数字
a_clear_chen
博客等级 码龄10年 4粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值