【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置
=========================================================================
主页点击直达:个人主页
我的小仓库:代码仓库
C语言偷着笑:C语言专栏
数据结构挨打小记:初阶数据结构专栏
Linux被操作记:Linux专栏
LeetCode刷题掉发记:LeetCode刷题
算法:算法专栏
C++头疼记:C++专栏
计算机网络基础:网络专栏=========================================================================
目录
LeetCode 1.两数之和
LeetCode 4.寻找正序数组的中位数
LeetCode 28.找出字符串中第一个匹配项的下标
LeetCode 34.在排序数组中查找元素的第一个位置和最后一个位置
LeetCode 1.两数之和
难度:简单
OJ链接
题目描述:
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]
思路讲解:双指针暴力遍历求解
第一篇文章我们说到有关数组的题我们要优先考虑双/多指针,这道题目也不例外。定义两个指针,一个在前一个在后,前一个遍历数组看和后一个的值相加匹不匹配,如果不匹配两个指针都向后加加知道,遍历出结果。因为题目中明确规定只有两个数,因此我们只开辟两个空间大小的数组,遍历出结果将两个指针的值放在我们开辟的数组中,返回我们的数组即可。
实现代码
int* twoSum(int* nums, int numsSize, int target, int* returnSize){int *a=(int *)malloc(sizeof(int)*2);for(int i=0;i<numsSize;i++){for(int j=i+1;j<numsSize;j++){if(nums[i]+nums[j]==target){a[0]=i;a[1]=j;break;}}}*returnSize=2;return a;
}
LeetCode 4.寻找正序数组的中位数
难度:困难
OJ链接
题目描述:
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n))
。
示例 1:
输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
思路讲解:双指针暴力合并
首先使用两个指针分别指向,两个数组的头,两两比较配合移动,将小的放在新开辟的数组中。然后判断新数组的大小的奇偶数,如果是奇数直接返回中间值,如果是偶数需要返回中间两数之和的平均数。
注意:
1.有可能一个数组走完了,另一个数组还没走完,哪一个我们也缺定不了,我们需要分别判断指针和两个数组距离的关系,将没移动完的数组全部放到新数组中。
2.有可能两个数组都为0,特殊情况我们要判断
3.数组总大小为偶数取平均数时,一定要除以浮点数。因为整数和整数相除只能得到整浮点数。
实现代码
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){int begin1 = 0;int begin2 = 0;int* a = (int*)malloc(sizeof(int) * (nums1Size + nums2Size));if (a == NULL){perror("malloc fail");}int i = 0;double b = 0;//根据大小合并两个数组while (begin1 < nums1Size && begin2 < nums2Size){if (nums1[begin1] <= nums2[begin2]){a[i] = nums1[begin1];begin1++;i++;}else{a[i] = nums2[begin2];begin2++;i++;}}//判断数组是否合并完全while (begin1 <nums1Size){a[i] = nums1[begin1];begin1++;i++;}while (begin2 < nums2Size){a[i] = nums2[begin2];i++;begin2++;}//全为0的特殊情况if (a[nums1Size + nums2Size - 1] == 0){return b;}//偶数个数else if ((nums1Size + nums2Size) % 2 == 0){b=(a[(nums1Size+nums2Size)/2]+a[(nums1Size+nums2Size)/2-1])/(double)2;//强制类型转化return b;}else{//奇数个数b = a[(nums1Size + nums2Size) / 2];return b;}
}
LeetCode 28.找出字符串中第一个匹配项的下标
难度:简单
OJ链接
题目描述:相当于模拟实现strstr库函数
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
示例 1:
输入:haystack = "sadbutsad", needle = "sad" 输出:0 解释:"sad" 在下标 0 和 6 处匹配。 第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = "leetcode", needle = "leeto" 输出:-1 解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
思路讲解:暴力双指针遍历求解
将两个指针分别指向两个数组,向后依次移动判断是否匹配,如果不匹配第一个数组的指针归于数组的第二个元素,第二个指针归于指针头,重新判断。当第一个指针移动到第一个数组长度减去第二个数组长度+1时,后面的就不必判断了。加一是为了防止两个数组的元素个数都为1。
实现代码
int strStr(char * haystack, char * needle){int next=0;int next2=0;int len1=strlen(haystack);int len2=strlen(needle);for(int i=0;i<len1-len2;i++){next=i;next2=0;for(int j=0;j<len2+1;j++){if(haystack[next]==needle[next2]){next++;next2++;if(len2==next2){return i;}}else{break;}}}return -1;
}
ps:这道题我的解法通过时间击败了LeetCode的100%的用户,希望大家能写出比我更快的代码!!!
LeetCode 34.在排序数组中查找元素的第一个位置和最后一个位置
难度:中等
OJ链接
题目描述:
给你一个按照非递减顺序排列的整数数组 nums
,和一个目标值 target
。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
示例 1:
输入:nums = [5,7,7,8,8,10]
, target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10]
, target = 6
输出:[-1,-1]
示例 3:
输入:nums = [], target = 0 输出:[-1,-1]
思路讲解:双指针暴力遍历求解
先定义一个指针找到和目标值相等的位置,在定义一个指针从这个位置找和目标值不等的位置,后一个指针减一就是这个范围。
注意:
1.如果后一个指针走到最后一个位置都没有找到那么后一个这个范围就是第一个指针的位置到数组大小减一的位置
2.如果两个指针的值都没有改变则表示这个数组中没有这个目标值
3.如果只有数组只有一个值,直接判断是否和目标值相等,相等的话返回[0,0]区间,不相等返回[-1,-1]。
实现代码
int* searchRange(int* nums, int numsSize, int target, int* returnSize){int *a=(int *)malloc(sizeof(int)*2);a[0]=a[1]=-1;int i=0;if(1==numsSize){if(nums[0]==target)a[0]=a[1]=0;return a;}for( i=0;i<numsSize;i++){if(nums[i]==target){a[0]=i;break;}}for(int j=i;j<numsSize;j++){if(nums[j]!=target){a[1]=j-1;break;}if(j==numsSize-1){a[1]=numsSize-1;}}if(a[0]==-1){return a;}*returnSize=2;return a;
}
总结:第一篇文章我提到数组的问题可以用双指针/多指针的问题来解决,今天分享的这四道题目也基本都用到了双指针或者双指针的思想,如果有更好的解法可以在评论区交流。
以后每天我会在LeetCode上面练习一道随机题目,每一周给大家总结发出来,分享我的方法思路希望大家看完后有收获。
相关文章:

【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置
主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法:算法专栏 C头…...

与HTTP相关的各种协议
TCP/IP TCP/IP协议是目前网络世界“事实上”的标准通信协议,实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP和IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。 这个协议栈有四层&#x…...

常见的网络攻击手段
网络攻击对个人、组织和整个社会都带来了严重的威胁,因此必须采取有效的安全措施来保护网络系统和用户的信息安全。网站是攻击者经常瞄准的目标,以下是一些常见的攻击方式: 1. DDoS攻击(分布式拒绝服务攻击)࿱…...

学习笔记---超基础+详细+新手的顺序表~~
目录 1.顺序表的前言 1.1 顺序表--->通讯录📇 1.2 数据结构的相关概念🏇 1.2.1 什么是数据结构 1.2.1 为什么需要数据结构 2. 顺序表概念及分类 2.1 顺序表的概念🐙 2.2 顺序表的分类🐫 2.2.1 顺序表和数组的区别 2.…...
Java高级-CompletableFuture并发编程利器
CompletableFuture核心Api 1.概述2.Async2.a) supplyAsync2.b) runAsync 3.Then3.a) thenApply()3.b) thenApplyAsync() 1.概述 Future可以在并发编程中异步获取结果 CompletableFuture实现了Future接口,肯定也会有Future的功能,也相当于是Future的一个…...
python、java、c++哪一个前景比较好?
Python是一种广泛使用的高级编程语言,适用于数据分析、人工智能、机器学习等领域。Java是一种通用的编程语言,适用于企业级应用开发、网站开发、软件开发、嵌入式领域等。C是一种系统编程语言,适用于嵌入式开发、游戏开发、音视频、服务端开发…...

【排序算法】详解直接插入排序和希尔排序原理及其性能分析
文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法, 基本思想…...
JDK1.8对HashMap的优化、以及通过源码解析1,8扩容机制
JDK 1.8 对 HashMap 进行了一些优化,主要包括以下几个方面的改进: 红黑树:在 JDK 1.8 中,当哈希碰撞(多个键映射到同一个桶)达到一定程度时,HashMap 会将链表转化为红黑树,以提高查找…...
Linux串口断帧处理
报文格式 1 Byte 4 Byte N Byte 4 Byte 1 Byte 0x02 报文长度 报文 CRC16 0x03 1. 每条报文以 STX(0x02)起始符开始,以 ETX(0x03)终止符结束。 2. 报文正文长度采用 4 字节的 10 进制字符串标识,如报文正…...

springboot集成kafka
1、引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.6</version></dependency> 2、配置 server:port: 9099 spring:kafka:bootstrap-servers: 192.1…...
近期总结2023.10.16
规律 1.两数相减,相加的最大,最小值 2.由最初的状态递推 3.无强制顺序,排序,不能排序,则与顺序有关 4.对于一段等差数列,不用一段一段的算局部整体,可以从整体一步步加差值 5.需要从一段式子推到结果困难&…...

【EI会议征稿】第二届可再生能源与电气科技国际学术会议(ICREET 2023)
第二届可再生能源与电气科技国际学术会议(ICREET 2023) 2023 2nd International Conference on Renewable Energy and Electrical Technology 2020年中国可再生能源发电规模显著扩大,风力和太阳能发电均呈迅速增长趋势。中国大力推进能源低碳化,减少温…...

让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架
ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力,加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务,无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如,在玩游戏时,人类可以利用…...

Jmeter脚本参数化和正则匹配
我们在做接口测试过程中,往往会遇到以下几种情况 每次发送请求,都需要更改参数值为未使用的参数值,比如手机号注册、动态时间等 上一个接口的请求体参数用于下一个接口的请求体参数 上一个接口的响应体参数用于下一个接口的请求体参数&#…...
vue 请求代理 proxy
目录 为什么需要配置代理 什么是同源策略 如何配置代理 请求代理的原理 举例说明 为什么需要配置代理 因为浏览器的同源策略,当向和本地 devServer 服务器不同源的地址发送请求, 会违反浏览器的同源策略,导致发送失败,所以需…...
使用Spring Boot构建稳定可靠的分布式爬虫系统
摘要:本文将介绍如何使用Spring Boot框架构建稳定可靠的分布式爬虫系统。我们将从系统设计、任务调度、数据存储以及容灾与故障恢复等方面进行详细讲解,帮助读者理解并实践构建高效的分布式爬虫系统。 1. 引言 随着互联网的快速发展,爬虫系…...

分享一个查询OpenAI Chatgpt key余额查询的工具网站
OpenAI Key 余额查询工具 欢迎使用 OpenAI Key 余额查询工具网站!这个工具可以帮助您轻松地验证您的 OpenAI API 密钥,并查看您的余额。 http://tools.lbbit.top/check_key/ 什么是 OpenAI Key 余额查询工具? OpenAI Key 余额查询工具是一…...

【LeetCode刷题(数据结构与算法)】:二叉树的后序遍历
给你一棵二叉树的根节点root 返回其节点值的后序遍历 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出:[1]…...

内网、外网、宽带、带宽、流量、网速之间的区别与联系
一.带宽与宽带的区别是什么? 带宽是量词,指的是网速的大小,比如1Mbps的意思是一兆比特每秒,这个数值就是指带宽。 宽带是名词,说明网络的传输速率速很高 。宽带的标准各不相同,最初认为128kbps以上带宽的就…...

打造类ChatGPT服务,本地部署大语言模型(LLM),如何远程访问?
ChatGPT的成功,让越来越多的人开始关注大语言模型(LLM)。如果拥有了属于自己的大语言模型,就可以对其进行一些专属优化。例如:打造属于自己的AI助理,或是满足企业自身的业务及信息安全需求。 所以ÿ…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...