Leetcode“存在重复元素“的多种排序算法实现

【leetcode C语言实现】217.存在重复元素 题目描述 给定一个整数数组,判断是否存在重复元素。 如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/contains-duplicate 解题思路 阅读详情

最近刷leetcode,遇到一题记录下
LC存在重复元素

给定一个整数数组,判断是否存在重复元素。

如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

最初采用最简单的遍历,结果显示超时

/*遍历算法*/
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        if (nums.size() == 0 || nums.size() == 1){
            return false;
        }
        for (int i = 0;i < nums.size();i++){
            for (int j = 0;j < i;j++){
                if (nums[i] == nums[j]){
                    return true;
                }
            }
        }
        return false;
    }
};

考虑了下该算法,时间复杂度高达O(n2),而且这种遍历模式比较像冒泡排序,所以考虑用排序算法来实现先排序,后查找;由于排序后是有序序列,查找相同元素遍历就能实现,则排序后算法复杂度为O(n),排序算法复杂度大于O(n),两者相加,得出最终算法复杂度取决于排序算法复杂度。
下面将尝试多种算法,并比对其在这条算法题内的优劣。

希尔排序

代码

/*希尔排序*/
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        if (nums.size() == 0 || nums.size() == 1){
            return false;
        }
        for(int i = nums.size() / 2;i > 0;i = i /2){
            for (int j = i;j < nums.size();j++){
                int k = j;
                int current = nums[k];
                while((k - i >= 0) && (nums[k - i] > current)){
                    nums[k] = nums[k - i];
                    k = k - i;
                }
                nums[k] = current;
            }
        }
        for(int  i = 0; i < nums.size() - 1;i++){
            if (nums[i] == nums[i + 1]){
                return true;
            }
        }
        return false;
    }
};

结果

希尔排序结果

归并排序

代码

/*归并排序*/
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        if (nums.size() < 2){
            return false;
        }
		nums = mergeSort(nums);
		for (int i = 0;i < nums.size() - 1;i++){
			if (nums[i] == nums[i + 1]){
				return true;
			}
		}
		return false;
    }
	vector<int> mergeSort(vector<int> nums){
		if (nums.size() < 2){
			return nums;
		}
		int halfLen = nums.size() / 2;
		vector<int> numsLeft;
		vector<int> numsRight;
		for (int i = 0;i < halfLen;i++){
			numsLeft.push_back(nums[i]);
		}
		for (int i = halfLen;i < nums.size();i++){
			numsRight.push_back(nums[i]);
		}
		return merge(mergeSort(numsLeft),mergeSort(numsRight));
	}

	vector<int> merge(vector<int> numsLeft,vector<int> numsRight){
		vector<int> nums;
		int iLeft = 0;
		int iRight = 0;
		while((numsLeft.size() > iLeft) && (numsRight.size() > iRight)){
			if (numsLeft[iLeft] < numsRight[iRight]){
				nums.push_back(numsLeft[iLeft]);
				iLeft++;
			}else{
				nums.push_back(numsRight[iRight]);
				iRight++;
			}
		}
		while(numsLeft.size() > iLeft){
			nums.push_back(numsLeft[iLeft]);
			iLeft++;
		}

		while(numsRight.size() > iRight){
			nums.push_back(numsRight[iRight]);
			iRight++;
		}

		return nums;
	}
};

结果

归并排序结果

【排序算法】【二叉树】【滑动窗口】LeetCode220: 存在重复元素 III 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j): i != j, abs(i - j) 阅读详情

相关推荐

全排列的算法(有重复数据)

n个有重复元素全排列:无重复的全排列为序列头元素与所有元素进行交换共n种情况,每种情况的后n-1位元素构成新的序列。 重复以上过程。因为有重复元素,想要序列不重复:(1)需要保证序列头元素与其余元素一次交换前后的序列头元素不相同,即除与自身交换外,两个相同元素不交换;(2)多次交换中不与同一元素进行第二次交换;上述条件保证了头元素与其余元素交换的过程中,相同元素不会重复出现在头部。

数据结构-排序算法(c语言实现篇)

数据结构中最全的排序算法(C语言实现)

CHAKMING1的博客 1万+

BurpSuite实战:5分钟搞定Pikachu靶场表单爆破(附最新字典配置技巧)

本文通过Pikachu靶场实战,详细演示了如何使用BurpSuite的Intruder模块对Web登录表单进行暴力破解。从代理配置、请求捕获、集束炸弹模式设置,到载荷配置与结果分析,提供了完整的操作流程。文中还分享了2024年有效的字典获取与优化技巧,帮助安全测试人员快速定位弱口令漏洞。

weixin_29327977的博客 601

几种排序的总结(包括含有重复数字的快速排序)

文章目录排序冒泡排序选择排序插入排序希尔排序 排序 冒泡排序 冒泡排序(Bubble Sort):一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 假设一个无序数组的长度N,利用冒泡排序将其从小到到进行排序: 基本思路: 1)要进行N - 1趟,此处趟数用i来表示 2)每一趟中要进行N - i次(i表示第几趟,从而

奋斗的龙猫的博客 1万+

字符集的选择

字符集的选择 一:背景介绍 DICOM特定字符集(0008,0005) 此标签获得不同的值就代表使用不同的语言进行解码。 以下为多家CT厂商的(0008,0005)取值: 字符集: unicode是字符集,ASCII、GB2312、GBK、GB18030既是字符集也是编码方式,UTF-8只是编码方式。 二:中文字符集介绍 世界通用字符集——UTF 中文字符集——GB2312、GBK、GB18030 字符集的详细介绍 一:UTF-8 程序是把一个字节一个字节的来读取,然后再根据字节中开头的bit

qq_41972968的博客 1520

中移物联ML307C模组OPENCPU笔记2

本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。

weixin_43700831的博客 1887

排序算法—希尔排序

1.希尔排序的算法思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 2.简单总结下希尔排序的基本思路: 先取一个小于n的整数gap1(一般为 n/3 +1)作为第一个增量,把数组全部记录分组。所有距离为 gap1 的倍数的记录放在同一个组中。先在每一小组内进行直接插入排...

Adenson的博客 694

INMP441麦克风与ESP32的I2S音频采集实战指南

本文提供了INMP441数字麦克风与ESP32开发板通过I2S接口进行高质量音频采集的完整实战指南。详细讲解了硬件连接、软件配置、数据读取及基础处理,并分享了常见的避坑技巧与性能优化建议,帮助开发者快速构建物联网音频应用。

weixin_28396629的博客 598

排序算法——解决大量重复元素的三向切分的快速排序

解决了元素重复问题

qq_42705793的博客 768

集成电路设计学习笔记(二)基于IC617反相器设计之原理图绘制

博主的博客网站 欢迎大家访问! ccbirds.cn ccbirds.github.io 本文主要记录在IC617中原理图的绘制和schematic的使用方法。 新建library 要画设计自己的集成电路,需要建一个自己的库,方便对自己设计文件的管理。 打开library manager,file 下NEW下Library 选择库的保存路径,一般默认即可,并在name中填入自己库的名字。...

ccbirds 7375

医用超声图像模拟系统算法:空间分辨率详解

医用超声图像模拟系统中的空间分辨率,是连接物理原理、信号处理算法和最终图像质量的桥梁。通过精确模拟从声场发射、组织相互作用到信号接收和图像重建的全链条过程,并运用先进的波束形成、解卷积和超分辨率算法,我们可以不断逼近并突破物理极限,为开发下一代高分辨率超声成像系统提供强大的算法验证平台和数据集来源。未来的趋势将是更高保真度的物理模拟、更智能的自适应算法与数据驱动方法的深度融合。

alxraves的博客 702

对有大量重复数字的数组进行排序(哈希表应用)

1. 问题 给定一个数组,已知这个数组中有大量的重复数字,如何对这个数组进行高效地排序 2. 思路 常规排序法没有用到大量重复数字这个特性,应该想到用 hash 表来解决这个问题 3. 代码实现 package main import ( "fmt" "sort" ) func sortArr(a []int) []int { d := make(map[int]int) // key 用于存储原始数组的 value 值 unique := make([]int, 0) // 原始数组经

wohu1104的专栏 922

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码)

本文深入解析Facebook登录协议的逆向工程,重点拆解`lgndim`和`encpass`等加密参数的生成逻辑,并提供完整的Python实现代码。通过Base64解码和RSA加密技术,帮助开发者理解并实现Facebook登录流程,同时涵盖工程优化与安全实践。

weixin_30687051的博客 477

多种解法全解析——力扣217. 存在重复元素

这道题要求判断数组中是否存在重复元素。最直观的暴力解法使用双重循环比对,但时间复杂度高达O(n^2)。更高效的方法是先排序后检查相邻元素,时间复杂度降为O(n log n)。最优解是使用哈希集合,在遍历时检查元素是否已存在,时间空间复杂度均为O(n)。Java 8+还可用流式写法简洁实现。相比而言,哈希集合法在时间效率和可读性上表现最佳,是推荐的首选方案。

w1311823723的博客 858

车载以太网测试-3【Wireshark介绍】

数据包捕获支持从多种网络接口(如以太网、Wi-Fi、蓝牙等)捕获数据包。可以实时捕获或从文件中读取已捕获的数据包。协议解析支持解析数百种网络协议(如 TCP/IP、HTTP、DNS、FTP 等)。能够深入解析协议头部和负载,帮助用户理解网络通信的细节。过滤功能提供强大的显示过滤器和捕获过滤器,帮助用户快速定位和分析感兴趣的数据包。支持基于协议、IP地址、端口号等多种条件的过滤。统计和分析提供多种统计工具,如流量图、会话统计、协议分层统计等。

车载网络测试工程师的博客 1991

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode第217题_存在重复元素

LeetCode 第217题要求判断一个整数数组中是否存在重复元素。题目提供了三种常见的解决方法:哈希表、排序和计数排序。哈希表方法通过遍历数组并使用集合记录已出现的元素,时间复杂度为O(n),空间复杂度为O(n)。排序方法先对数组排序,然后检查相邻元素是否相同,时间复杂度为O(n log n),空间复杂度为O(1)或O(n)。计数排序适用于元素范围较小的情况,但空间复杂度可能较高。代码实现展示了C#、Python和C++的解决方案,并对比了各语言的性能。哈希表方法在实际应用中效率较高,而Python的集合

qq_40263592的博客 1892

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LeetCode 217. 存在重复元素 java

LeetCode 217. 存在重复元素 java 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true ...

lele的专栏 512

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetcode:存在重复元素

Leetcode(初级算法):存在重复元素 题目 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 思路 思路一 最初的思路是每个元素都进行比较,即进行两次for循环,如果两个数相减为0,表示有重复的元素,直接返回true,退出所有循环 。但是这个思路真的有点low,第一次提交只击败了7%的人,可见还需...

weixin_43870424的博客 274

leetcode-217-存在重复元素(java|python)

title: leetcode-217-存在重复元素(java|python) date: 2019-09-30 13:53:32 categories: leetcode tags: leetcode leetcode-217-存在重复元素(java|python) 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相...

weixin_42479155的博客 308

力扣217. 存在重复元素

leetcode简单题算法

weixin_53324450的博客 4968

力扣217-存在重复元素(多方法比较 Java版题解)

力扣217-存在重复元素 一、原题题目 1.1 题目   给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 1.2 示例 示例1: 输入: [1,2,3,1]输出: true 示例2: 输入: [1,2,3,4]输出: false 示例3: 输入: [1,1,1,3,3,4,3,2,4,2]输出: true 来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr

ItDaChuang的博客 424

[LeetCode] 存在重复元素

存在重复元素 217、存在重复元素 难度:Easy 题目描述: 给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输入: [1,1,1,3,3,4,3,2,4...

WchStrife的博客 247

【LeetCode】217. 存在重复元素(js 实现)

1、题目:217. 存在重复元素 - 力扣(LeetCode) (leetcode-cn.com) 2、实现 (1)方法一:使用ES6中的Set对象 /** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { let arr = [...new Set(nums)]; return !(arr.length === nums.length); }; S

在热爱技术的路上一直前行。 369

4. leetCode--217存在重复元素

1. leetCode–217.存在重复元素 题目连接:https://leetcode-cn.com/problems/contains-duplicate/ 题目类型: 简单数组 1.1 问题描述 给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输

weixin_45267102的博客 198

【leetcode】存在重复元素

存在重复元素 题目: 给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回true 。如果数组中每个元素都不相同,则返回false 。 示例1: 输入: [1,2,3,1] 输出: true 示例2: 输入: [1,2,3,4] 输出: false 示例3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true 算法流程: 排序算法:排序之后扫描已排序的数组以查找是否有任何连续重复元素。 复杂度分析: 时间复杂度:O(nlogn):排序的复杂度是

zevzheng的博客 171

LeetCode || 219. 存在重复元素III

时间:2019.4.12 周五 题目:给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 k。 原题链接:https://leetcode-cn.com/problems/contains-duplicate-iii/description/ 难度:Medium 分析:根据题...

qq_40283353的博客 147
上一篇: WSL下搭建C开发环境,解决stdio.h缺失,build-essential安装失败,包依赖问题
下一篇: 解决git clone Github 项目速度太慢问题
慕易杨
博客等级 码龄11年 7粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值