OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录

 ​编辑

 1.题目描述

2.C语言中的内置排序函数(qsort)

3.解题思路

3.1 升序

3.2双指针的移动

 3.3 保证加入元素的唯一性

4.leetcode上的完整代码

完结散花


 

                                            悟已往之不谏,知来者犹可追                                                        

创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 

 1.题目描述

给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至
少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。
OJ链接【 leetcode 题号:747. 至少是其他数字两倍的最大数】【难度:简单】
示例:
输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。
输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1 。
输入:nums = [1]
输出:0
解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍

349. 两个数组的交集 - 力扣(LeetCode)题目链接放这里啦~

2.C语言中的内置排序函数(qsort)

在讲解题目之前我想和宝子们分享一个C语言中的内置排序函数~  举个栗子啦~

/* qsort example */
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* qsort */int values[] = { 40, 10, 100, 90, 20, 25 };int compare (const void * a, const void * b)
{return ( *(int*)a - *(int*)b );
}int main ()
{int n;qsort (values, 6, sizeof(int), compare);for (n=0; n<6; n++)printf ("%d ",values[n]);return 0;
}

                                             

3.解题思路

3.1 升序

这道题很明显是用哈希数组来做,但如果我们没有学哈希表的话,或者我们是否还有其他的方法来解题呢~

之前我们就知道对于无序的数组,当我们对其进行排序后,问题都会变得更加简单呢~

没有例外,我们现将这俩个数组进行有序化处理

int intCmp (const void * a, const void * b)
{return ( *(int*)a - *(int*)b );
}qsort(nums1, nums1Size, sizeof(int), intCmp);qsort(nums2, nums2Size, sizeof(int), intCmp);*returnSize = 0;//要返回数组的大小先初始化为零int index1 = 0,;//记录数组一的下标int index2 = 0;//记录数组二的下标//创建一个最大的数组来存放相同的元素int* returnNums = malloc(sizeof(int) * (nums1Size + nums2Size));

3.2双指针的移动

 然后我们有俩个指针分别指向数组nums1中的第一个元素和nums2的第一个元素~

要求俩个数组的交集,那我们就要找俩个数组当中相同的元素~

所以我们就要一一比较俩个数组中的元素,那我们怎么比较呢~

我们先比较俩个指针指向的第一个元素,如果相同双指针就同时向后移动,并把相同元素存放到数组returnNums中,如果不相同,则哪个指针指向的元素小,哪个指针就向后移动后继续比较

算法的图示在下面啦~

 这部分的代码如下啦~

    //两个都小于数组长度才去遍历while (index1 < nums1Size && index2 < nums2Size){if (nums1[index1] == nums2[index2]) {returnNums[(*returnSize)++] = nums1[index1];index1++;index2++;} else if (nums1[index1] < nums2[index2]) index1++;else index2++;}

 3.3 保证加入元素的唯一性

注意:我们还要确保加入returnNums中元素的唯一性!

所以我们还要加上一个判断条件~

if(!*(returnSize)||nums1[index1]!=returnNums[*(returnSize)-1])returnNums[(*returnSize)++] = nums1[index1];

 !*(returnSize)表示当(*returnSize)=0(即表示假)把他转换成为真以此来应对当数组中还没有存放元素是的情况

4.leetcode上的完整代码


int intCmp (const void * a, const void * b)
{return ( *(int*)a - *(int*)b );
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) 
{qsort(nums1, nums1Size, sizeof(int), intCmp);qsort(nums2, nums2Size, sizeof(int), intCmp);*returnSize = 0;//要返回数组的大小先初始化为零int index1 = 0;//记录数组一的下标int index2 = 0;//记录数组二的下标//创建一个最大的数组来存放相同的元素int* returnNums = malloc(sizeof(int) * (nums1Size + nums2Size));//两个都小于数组长度才去遍历while (index1 < nums1Size && index2 < nums2Size){if (nums1[index1] == nums2[index2]) {if(!*(returnSize)||nums1[index1]!=returnNums[*(returnSize)-1])returnNums[(*returnSize)++] = nums1[index1];index1++;index2++;} else if (nums1[index1] < nums2[index2]) index1++;else index2++;}return returnNums;
}

5.完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新增C++max函数的使用

在 C 中&#xff0c;max函数是标准库中的一个函数&#xff0c;用于返回两个或多个元素中的最大值。max函数的声明如下&#xff1a; cpp #include <algorithm>template<class T> const T& max(const T& a, const T& b);这个函数接受两个同类型的参数a…

UML 2.5图形库

UML 2.5图形库 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#…

UnityShader:直接光照效果/点光/平行光阴影

效果&#xff1a; 代码&#xff1a; Shader "MyShader/PhongNormal" {Properties{_DiffuseTex("漫反射贴图",2d)"white"{}_AOTex("AO贴图",2d)"white"{}_SpecularMask("高光遮罩",2d)"white"{}_Normal…

大模型实战营第二期——2. 浦语大模型趣味Demo

文章目录 1. 大模型及InternLM模型介绍2. InternLM-Chat-7B智能对话Demo2.1 基本说明2.2 实际操作2.2.1 创建开发机2.2.2 conda环境配置2.2.3 模型下载2.2.4 InternLM代码库下载和修改2.2.5 cli运行2.2.6 web_demo运行 3. Lagent智能体工具调用Demo3.1 基本说明3.2 实际操作3.2…

商业智能(BI)数据分析、挖掘概念

商业智能&#xff08;BI&#xff09;数据分析挖掘概念 一、商业智能&#xff08;BI&#xff09;数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 1.分析型客户关系管理&#xff08;Analytical CRM/aCRM 用于支持决策&…

nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法

1、我们知道 nodeJS 是老外搞出来的&#xff0c;服务器放在了国外&#xff0c;国内的小朋友访问起来会比较慢&#xff0c;阿里巴巴的淘宝给出了有力支持&#xff0c;现在我们就将 nodeJS 的镜像地址切换为国内的淘宝镜像。 2、查看当前的镜像地址&#xff1a; npm get registr…

数据库管理-第147期 最强Oracle监控EMCC深入使用-04(20240207)

数据库管理147期 2024-02-07 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;20240207&#xff09;1 发现Exadata2 Exadata监控计算节点&#xff1a;存储节点RoCE交换机管理交换机PDU 总结 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;202402…

JavaScript 入门 完整版

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

用HTML5实现灯笼效果

本文介绍了两种实现效果&#xff1a;一种使用画布&#xff08;canvas&#xff09;标签/元素&#xff0c;另一种不用画布&#xff08;canvas&#xff09;标签/元素主要使用CSS实现。 使用画布&#xff08;canvas&#xff09;标签/元素实现&#xff0c;下面&#xff0c;在画布上…

机器学习 | 深入集成学习的精髓及实战技巧挑战

目录 xgboost算法简介 泰坦尼克号乘客生存预测(实操) lightGBM算法简介 《绝地求生》玩家排名预测(实操) xgboost算法简介 XGBoost全名叫极端梯度提升树&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle数据挖掘比赛中&#xff0c;大部分获胜者用了XGBoost。…

【代码随想录26】332.重新安排行程 51.N皇后 37.解数独

目录 332.重新安排行程题目描述参考代码 51.N皇后题目描述参考代码 37.解数独题目描述参考代码 332.重新安排行程 题目描述 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机…

JRebel激活-nginx版本

nginx转发流量&#xff08;代替其他网上说的那个工具&#xff09; proxy_pass http://idea.lanyus.com; 工具激活 填写内容说明&#xff1a; 第一行的激活网址是&#xff1a;http://127.0.0.1:8888/ 正确的GUID。GUID 可以通过专门的网站来生成&#xff08;点击打开&#…

kettle控件-复制记录到结果/ 从结果获取记录的使用

在数据采集过程中&#xff0c;遇到对方数据传送不及时的情况&#xff0c;导致数据漏采集&#xff0c;需要手工反复补采。为了解决这一问题&#xff0c;可以利用kettle的复制记录到结果/从结果获取记录控件。 job的整个流程如下&#xff1a; 设置变量&#xff1a; 创建目录: ge…

STM32输出PWM波控制180°舵机

时间记录&#xff1a;2024/2/8 一、PWM介绍 &#xff08;1&#xff09;脉冲宽度调制 &#xff08;2&#xff09;占空比&#xff1a;高电平时间占整个周期时间的比例 &#xff08;3&#xff09;STM32通过定时器实现PWM时具有两种模式 PWM1模式&#xff1a;向上计数模式下&…

软件测试工程师——缺陷(一篇足以)

目录 定义 缺陷的类型 缺陷的严重程度 缺陷的状态 缺陷的根源 ​缺陷的来源 缺陷的起源 缺陷的生命周期 缺陷的识别 缺陷报告模板 编写缺陷报告的目的 缺陷报告编写的准则 缺陷描述的准则 定义 1. 软件未实现产品说明书中所提及的功能 2. 软件实现了产品说明书中…

echarts图表插件

图表组件 ECharts&#xff0c;全称为Enterprise Charts&#xff0c;是一个使用JavaScript实现的开源可视化库。它主要用于数据可视化领域&#xff0c;能够方便地创建出直观、交互性强的图表。ECharts由百度团队开发&#xff0c;目前是Apache的顶级项目之一。ECharts支持的图表…

JVM调优(Window下)

1、编写代码&#xff0c;像下面代码这样&#xff0c;产生OOM&#xff0c; private static final Integer K 1024;/*** 死循环&#xff0c;验证JVM调优* return*/GetMapping(value "/deadLoop")public void deadLoop(){int size K * K * 8;List<byte[]> lis…

Java后端技术助力,党员学习平台更稳定

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Linux介绍和命令使用

目录 目录 一、Linux简介 1.1 主流操作系统 1.2 Linux 发展历史 1.3 Linux系统版本 二、Linux安装 三、Linux 目录结构 四、Linux常用命令 4.1 基础常用命令说明 4.2 Linux 命令使用技巧 4.3 Linux 命令格式 4.4 进阶重点常用命令 4.4.1 拷贝移动命令 4.4.2 打包…

AI嵌入式K210项目(26)-二维码识别

文章目录 前言一、什么是二维码&#xff1f;二、实验准备三、实验过程四、API接口总结 前言 本章介绍基于机器视觉实现二维码识别&#xff0c;主要包含两个过程&#xff0c;首先检测图像中是否有二维码&#xff0c;如果有则框出并打印二维码信息&#xff1b; 一、什么是二维码…