leetcode每日一题:数组篇(1/2)

news2024/11/28 7:28:17

请添加图片描述

😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘
🤗专栏:每日算法学习
💬个人主页:个人主页

算法分类:数组篇练习
语言:java
题目来源:力扣
预期学习时间:两天

文章目录

  • 你真的弄懂二分法么?
    • 帮你弄懂二分
    • 练习
    • 思路
    • 示例代码:
  • 双指针
    • 什么是双指针?
    • 练手题目
    • 思路
    • 示例代码:

你真的弄懂二分法么?

帮你弄懂二分

时间复杂度:log(n)
适用场景:已排序,每次只能找到一个值
边界问题: 主要看的是右边界的取值

第一种 左闭右开 left =0,right = nums.length;
所以判断条件是 while(left<right)
右边取不到,所以当nums[right]>target时,right=mid,因为取mid时大于,又因为右开,所以right直接取mid;

左闭右开模版:

int left = 0,right = nums.length;
while(left<right){
	int mid = left+(right-left)>>1;
	if(nums[mid] == target){
		return mid;
	}
	if(nums[mid]>target){
		right = mid;
	}else{
		left = mid+1;
	}
}

第二种:左闭右闭 left =0,right=nums.length-1;
因为左右都可以取到,所以while(left<=right)
当nums[mid]>target时,因为右边可以取到,所以right=mid-1;

左闭右闭模版:

int left = 0,right = nums.length-1;
while(left<=right){
	int mid = left+(right-left)>>1;
	if(nums[mid] == target){
		return mid;
	}
	if(nums[mid]>target){
		right = mid-1;
	}else{
		left = mid+1;
	}
}

练习

原题链接:二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

提示:

你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。

思路

首先判断题中给的条件,有序,查找单个元素,套用上面的模版进行作答

示例代码:

func search(nums []int, target int) int {
    length:= len(nums)
    left := 0
    right:=length-1
    for left<=right{
        mid:=left+(right-left)>>1
        if nums[mid] == target{
            return mid
        } 
        if nums[mid] >target{
            right = mid-1
        }else{
            left = mid+1
        }
    }
    return -1
}

双指针

什么是双指针?

双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。

练手题目

原题链接

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);
// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}

示例1:

输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解释:函数应该返回新的长度 2, 并且
nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums =
[2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2 输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0,
4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示:

0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

思路

题中规定了空间复杂度,所以不能另开数组,然后数组中不能删除,只能覆盖,所以使用快慢指针,同向而行,通过移动快指针来判断值,然后赋值给慢指针,从而达到更新数组的效果

示例代码:

class Solution {
    public int removeElement(int[] nums, int val) {
       int slow =0,fast = 0;
       while(fast<nums.length){
           if(nums[fast] == val){
               fast++;
           }else{
               nums[slow++] = nums[fast++];
           }
       }
       return slow;
    }
}

码字不易,感谢您的阅读,希望对您有所帮助。关注我,完成每日算法自律打卡,什么时候开始都不晚!!

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

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

相关文章

key的作用和原理、列表过滤

一、key的作用与原理 虚拟DOM对象的标识。当状态中的数据发生变化时&#xff0c;vue会根据新数据生成新的虚拟DOM。随后vue进行新虚拟DOM与旧虚拟DOM的差异比较&#xff0c;规则如下&#xff1a;对比规则&#xff1a; 旧虚拟DOM中找到了与新虚拟DOM相同的key 若虚拟DOM中内容没…

Iceberg 数据湖是什么?数据湖能解决什么问题?独立于计算层和存储层之间的表格层?

Iceberg 数据湖是什么&#xff1f;数据湖能解决什么问题&#xff1f;独立于计算层和存储层之间的表格层&#xff1f;0. 导读1. Hive数仓遇到的问题2. 一种开放的表格式3. 自下而上的元数据4. 高性能的查询4.1 分区剪裁4.2 文件过滤4.3 RowGroup过滤参考&#xff1a;https://ice…

kafka-4 生产者和消费者

kafka的生产者和消费者四、 生产者4.1 分区分配策略4.2 副本和消息消费4.2.1 副本&#xff08;AR、ISR、OSR&#xff09;4.2.2 HW与LEO4.2.3 ISR 集合和 HW、LEO的关系五、消费者5.1 分区分配策略5.2 消费者offset的存储四、 生产者 4.1 分区分配策略 &#xff08;1&#xff…

【20】linux进阶——linux的数据流和重定向

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

一、LED子系统框架分析

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;文章目录1、前言2、LED裸机处理3、LED子系统框架4、LED子系统目录结构及核心文件5、sysfs目录结构5.1 确保LED子…

低代码开发重要工具:私有化部署的jvs-logic的设计与价值

逻辑引擎介绍 逻辑引擎是一种能够处理逻辑表达式的程序&#xff0c;它能够根据用户输入的表达式计算出表达式的值。在实际应用中&#xff0c;逻辑引擎通常被用于处理规则引擎、决策系统、业务规则配置等领域&#xff0c;具有广泛的应用前景。 逻辑引擎如下图所示&#xff0c;在…

Hive中SQL基本操作

文章目录1. Hive 中DDL1) 数据库操作2) 创建表 Create table3&#xff09;内部外部表区别4) Create Table As Select (CTAS)4&#xff09;分区表 partition2 .Hive中 DML1&#xff09;从文件加载数据 Loading files into tables2&#xff09;插入 INSERT3&#xff09;更新 UPDA…

《疯狂Java讲义》读书笔记7

Navicat快捷键 刷新&#xff1a;FnF5 表内容页面打开表设计页面&#xff1a;CtrlD 打开 MYSQL 命令行窗口&#xff1a;FnF6 MYSQL 增减查改 create table student(stuid int not null auto_increment primary key,stuname varchar(200),stustatus varchar(100) ); create …

TCP/IP协议工作原理与工作流程

一、TCP/IP协议工作原理 1、OSI模型 使用OSI模型来描述一个网络中的各个协议层&#xff0c;如下&#xff1a; 2、理解TCP/IP协议 TCP/IP协议&#xff0c;英文全称Transmission Control Protocol/Internet Protocol&#xff0c;包含了一系列构成互联网基础的网络协议&#xff0…

本地部署ChatGLM-6B模型(使用JittorLLMs大模型推理库)

简介 网上冲浪时发现的这两个国产模型&#xff0c;重点是对硬件的要求并不高&#xff0c;有2GB内存就可以跑&#xff0c;觉得有趣就弄来玩了下。 https://github.com/Jittor/JittorLLMs https://github.com/THUDM/ChatGLM-6B 简单介绍下用到的仓库 ChatGLM-6B ChatGLM-6B 是…

有偏估计的发展及其在球谐函数拟合中的应用研究

有偏估计的发展及其在球谐函数拟合中的应用研究 阚昊宇 专业&#xff1a;大地测量与测量工程 学号&#xff1a;XXX 邮箱&#xff1a;XXX 电话&#xff1a;XXX 摘要&#xff1a;球谐函数在大地测量等领域具有重要意义&#xff0c;然而在观测量不多或空间分布不均匀时进行高阶…

视频编解码(一)之virtio-gpu环境搭建

一、基础概念 VA-API Video Acceleration API 是一组开源应用API接口&#xff0c;赋能应用&#xff08;比如VLC播放器、GStreamer等&#xff09;使用hardware video acceleration&#xff08;一般是GPU提供硬件视频加速功能&#xff09;&#xff0c;VA-API主要由开源库libva和…

机器学习算法系列(三)

机器学习算法之–对数几率回归&#xff08;逻辑斯蒂回归&#xff09;算法 上个算法&#xff08;算法系列二&#xff09;介绍了如何使用线性模型进行回归学习&#xff0c;但若要做的是分类任务&#xff0c;则需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值…

Scons自动大型系统构建工具

1、先了解一下make 在Linux系统上做过c/c++开发的同学们都知道一个项目工程管理工具:make和Makefile。 make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。 通过检查文件的修改时间,make 工具可以知道编译目标文…

关于原子服务的思考

在我们以往的工作中经常会遇到“原子服务”或“原子化服务”的概念&#xff0c;如果没有一个清晰的概念边界&#xff0c;会使大家的沟通和讨论无法在同一个共识上展开&#xff0c;大家不在同一频道上&#xff0c;割裂于不同的领域空间&#xff0c;难以产生一致性的进展。那么&a…

SAR ADC系列26:系统设计

目录 串一下知识点&#xff1a; 设计一个高速异步SAR ADC 设计目标&#xff1a; 电路架构&#xff1a;&#xff08;具体电路看前文&#xff09; 采样网络&#xff1a; 采样电容&#xff1a; CDAC开关切换策略&#xff1a; CDAC阵列冗余设计&#xff1a; SAR 逻辑 比…

谈谈内存模型happen-before讲的什么?

大家好我是易安&#xff01; 今天我要讲述的是Java内存模型中的happen-before。 Java语言在设计之初就引入了线程的概念&#xff0c;以充分利用现代处理器的计算能力。多线程机制既带来了强大、灵活的优势&#xff0c;也带来了线程安全等令人混淆的问题。在这种情况下&#xff…

二叉查找树

目录 一、二叉查找树概念 二、结点内部类代码实现&#xff1a; 三、二叉查找树的插入原理​编辑 四、遍历的方式&#xff08;中序遍历&#xff09;&#xff1a; 五、二叉查找树实现指定值删除对应的结点 六、main方法测试 一、二叉查找树概念 二、结点内部类代码实现&…

聚类问题的算法总结

目录 一、K-means算法 1、算法原理 2、如何确定K值 3、算法优缺点 二、DBScan聚类 1、算法原理 2、处理步骤 3、算法优缺点 聚类代码实现 聚类算法属于无监督学习&#xff0c;与分类算法这种有监督学习不同的是&#xff0c;聚类算法事先并不需要知道数据的类别标签&am…

高效释放数据价值,数智融合平台有门道

在数字经济时代&#xff0c;数据上升为新的关键生产要素&#xff0c;逐渐超越土地、资本等传统要素&#xff0c;成为社会经济发展和企业创新更加重要的驱动力。 但如何充分释放数据价值在当下依然是一个世界性难题。一方面&#xff0c;企业与组织逐渐拥有海量数据规模和丰富应…