相关算法---数组

LeeCode每日一题–移除元素 【前言】坚持日更LeeCode刷题系列     不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!   【题目】27.移除元素     题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于val 的元素,并返回移除后数组的新长度。     不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。     元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。     示例: 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前 立即下载

数组

1. 理论基础

数组是存放在连续内存空间上的相同类型数据的集合。

数组下标都是从0开始的,内存空间的地址是连续的。因而在删除或者增添元素的时候,难免会移动其他元素的地址。数组的元素是不能删的,只能覆盖。

2. 二分查找

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

题目分析:有序数组;数组中无重复元素。(很适合二分查找

class Solution {
    public int search(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        
        while(left <= right){ //注意这是<=
            int mid = (left + right) / 2;
            if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] == target){
                return mid;  
            }else{
                right = mid - 1;
            }
        }
        return -1;
    }
}

3. 移除元素

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

题目分析:数组元素只能覆盖。不能进行移除。可以使用快慢指针在一个for循环完成两个for循环的事情。

class Solution {
    public int removeElement(int[] nums, int val) {
        //快慢指针
        int fast = 0;
        int slow;
        for(slow = 0; fast < nums.length; fast++){
            if(nums[fast] != val){
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }
}

4. 有序数组的平方

题目:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

题目分析:

  • 暴力解决:直接值进行平方,然后再排序。

    class Solution {
        public int[] sortedSquares(int[] nums) {
            int[] arr = new int[nums.length];
            for (int i = 0; i < nums.length; i++) {
                arr[i] = nums[i] * nums[i];
            }
            Arrays.sort(arr);
            return arr;
        }
    }
    
  • 快慢指针:因为数组一开始是有序的,那么平方后最大的值只能是在两端,就可以双指针,一个指向起始位置,一个指向最后位置,向中间不断靠近直到相遇。

    class Solution {
        public int[] sortedSquares(int[] nums) {
            int n = nums.length;
            int[] arr = new int[n];
            int left = 0, right = n - 1;
            int index = n - 1;
            while(left <= right){
                if(nums[left] * nums[left] < nums[right] * nums[right]){
                    arr[index--] = nums[right] * nums[right];
                    right--;
                }else{
                    arr[index--] = nums[left] * nums[left];
                    left++;
                }
            }
            return arr;
        }
    }
    

5. 长度最小的子数组

题目:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

题目分析:用滑动窗口解决问题。滑动窗口就是调节子序列的起始和最终位置来找到结果。滑动窗口的绝妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0; //滑动窗口的起始位置
        int sum = 0; //滑动窗口数值之和
        int result = Integer.MAX_VALUE;
        for(int right = 0; right < nums.length; right++){
            sum += nums[right];
            //每次更新left(起始位置),并不断比较子序列是否符合条件
            while(sum >= target){
                //取得子序列的长度
                result = Math.min(result, right - left + 1);
                //在符合条件下,把窗口缩小看还能不能符合条件,直到找到最小长度
                sum -= nums[left++];
            }
        }
        //如果result没有被赋值的话就表明没有符合条件的子序列,返回0
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}

6. 螺旋数组II

题目:给定一个正整数 n,生成一个包含 1 到 n2n^2n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

题目分析:循环不变量原则。

模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右行从上到下
  • 填充下行从右到左
  • 填充左行从下到上

画四条边,每一条边都要坚持一致的左闭右开(或者左开右闭)原则,一圈下来都按照统一的规则画下去,拐角处让新的一条边来继续画。

易错点:
i—>X j—>Y
上下侧是看有好多列 故用j
左右侧是看有好多行 故用i
X Y是i j的起始位置 故下侧和左侧是j > Y i > X

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];

        //循环次数
        int loop = n / 2;

        //定义每次循环起始位置
        int startX = 0, startY = 0;

        //定义偏移量
        int offset = 1;

        //定义填充数字
        int count = 1;

        //定义中间位置
        int mid = n / 2;

        while(loop > 0){
        //i对应X,j对应Y(相当于X横轴,Y纵轴
            int i = startX;
            int j = startY;

            //每一次循环要少前后两个元素 因而offset在后面是+2 X、Y表示i,j下标开始的位置 因为每次只输出一个元素 因而X、Y每次只+1
            
            //模拟上侧从左到右
            for(; j < startY + n - offset; ++j){
                res[startX][j] = count++;
            }

            //模拟右侧从上到下
            for(; i < startX + n - offset; ++i){
                res[i][j] = count++;
            }

            //模拟下侧从右到左
            for(; j > startY; j--){
                res[i][j] = count++;
            }

            //模拟左侧从下到上
            for(; i > startX; i--){
                res[i][j] = count++;
            }

            loop--;

            startX += 1;
            startY += 1;

            offset += 2;
        }

        if(n % 2 == 1){
            res[mid][mid] = count;
        }

        return res;
    }
}
HDFView安装及使用教程 简介:直接用记事本打开hdf5文件的话,是一团乱码。HDFView是用来查看hdf5文件的软件,可以免费使用,好多人都有闪退的情况,这是因为没有添加环境变量。 阅读详情

相关推荐

BLDC方波控制双闭环Simulink仿真模型

无刷直流电机方波控制双闭环Simulink仿真模型搭建详细教程,包括速度PI环、电流PI环、换向逻辑和受控电压源,仿真结果良好。

m0_57458432的博客 6871

为什么说“数组的元素是不能删的,只能覆盖。”按理来说数组元素不是可以删除的吗?

为什么说“数组的元素是不能删的,只能覆盖。”按理来说数组元素不是可以删除的吗?

XRT_knives的博客 1038

从Low Byte解析DTC故障类型:系统开发中的诊断精细化实践

本文深入解析DTC故障诊断中Low Byte的关键作用,详细介绍了其在系统开发中的精细化应用实践。通过分析Low Byte的编码规则和故障分类设计,帮助开发者优化诊断数据库和解码方案,提升汽车电子系统的故障诊断效率和准确性。

weixin_28312391的博客 264

《算法系列》之数组

一般纯数组的题都不会太难,但需要我们细心一些。

小夏陌的博客 1456

SAP S/4HANA 物料分类账(ML)/实际成本核算(Actual Costing)——底表全景 & CKMLCP 执行后数据变化

插入 ML 重估凭证行项目:Dr/Cr 库存科目(期末库存调整)、Dr/Cr COGS/消耗科目(消耗重估)、Cr/Dr ML 重估抵消科目(PRY/PRV 类逻辑)also STPRS/VERPR/PEINH/LBKUM 等(但 S/4 很多“真理”在 ACDOCA)MLPP / MLPPF / MLCR / MLCRF / MLCD / CKMLMV003/004 等。Material Ledger Document(行项目明细:收货/发票价差/结算写入/重估相关)间接(PUP在CKMLCR;

weixin_52203666的博客 587

串口通信的性能瓶颈分析:如何提高数据吞吐量和降低延迟

摘要: 串口通信在高频或大数据场景下存在吞吐量不足、延迟高、丢帧等问题,主要瓶颈包括波特率限制、缓冲区不足、CPU轮询延迟等。优化策略包括:提升波特率至硬件上限、增大缓冲区、采用异步I/O(如ReadAsync)减少线程切换,使用二进制协议降低解析开销。实时性方面需启用硬件流控、批量发送数据,并优化线程优先级。跨平台适配需区分Windows/Linux的缓冲区设置与异步机制。性能测试可通过吞吐量、延迟及回环测试验证优化效果,核心原则是硬件匹配、异步处理、协议优化与跨平台适配。(150字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 986

【数组 | 第1篇】为什么说数组的元素是不能删的,只能覆盖?

当提到“删除”数组中的元素,实际上数组本身的大小并没有改变。如果你希望将某个元素的值改变为另一个值,可以直接通过索引访问并赋新值。如果需要更灵活的添加和删除操作,建议使用其他数据结构(比如动态数组)。首先,数组的大小是固定的,也就是说,数组在创建时就确定了元素的数量。数组的元素不能被真正删除,只能通过覆盖来实现,数组在创建后,其大小是固定的。

serendipity_hky的博客 474

在时间轴上联动多张内表:ABAP 的 PROVIDE ... ENDPROVIDE 区间联动迭代实战

PROVIDE 是 ABAP 中处理有效期区间数据的强大工具,它能自动将多张内表按时间维度切片并联合处理。其核心功能包括:指定区间边界字段(BOUNDS),定义外部总区间(BETWEEN),并通过工作区和标志位(VALID)标识每张表在当前子区间是否生效。该语法特别适合 HR 信息类型等有效期数据,能避免手动处理区间重叠、排序和空档等问题。使用时需注意字段投影(FIELDS)限制、工作区只读原则,以及异常处理(如区间重叠或未排序)。典型应用场景包括员工调岗记录、价格有效期管理等需要时间轴联动的业务逻辑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1672

数据结构与算法--概论

数据结构与算法--概论

joker_sxj的博客 7320

把静态前端托管进 SAP BTP:HTML5 Application Deployer 与企业级内容部署全攻略

本文介绍了在SAP BTP Cloud Foundry环境中使用HTML5 Application Repository托管前端静态资源的工程化实践。通过HTML5 Application Deployer工具,结合MTA描述、路由配置和服务实例,实现前后端解耦和标准化部署。文章详细阐述了目录结构、关键配置文件、MTA编排以及构建部署流程,并针对大体积前端资源提供了GACD和异步上传两种解决方案。最后说明了如何与AppRouter协同工作,使部署内容可供终端用户访问。这套方法使前端更新无需重启后端,支持团队

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 157

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard-确定模拟区域

WW、forever的博客 2918

算法学习Day01 | 数组理论基础、LeetCode 704.二分查找、LeetCode 27.移除元素

数组理论基础、LeetCode 704.二分查找、LeetCode 27.移除元素

2301_80211119的博客 720

vue3 - 实现WebRTC播放实时rtsp视频流+NVR录像机回放,web前端浏览器网页播放RTSP推流,支持海康威视大华等摄像头/监控设备对接(监控摄像头录像及回放,拿到rtsp视频流如何处理)

vue3,webrtc-streamer,rtsp视频流,监控画面,nvr录像机,回放功能,监控摄像头设备,vue3播放Rtsp推流示例代码,前端如何在vue3项目中播放rtsp视频流,VUE中播放RTSP实时推流播放解决方案,vue3 webrtc播放rtsp视频流,vue3实现rtsp视频流浏览器实时播放,海康摄像机、NVR、流媒体服务器、回放取流RTSP地址,vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频,播放海康rtsp监控视频,海康摄像机/录像机预览+回放RT

✅ 精选推荐文章 1万+

数组和相关算法

水上乐园物品存放区// 格式数据类型 数组名[常量容量] = {满足数据类型要求的初始化数据};数据类型:明确告知当前数组存储的数据类型是哪一个类型,要求存放的数据只能是当前数据类型,严格遵守数据类型一致化原则。数组名:操作数据使用的对应名称1. 数组名在一定范围以内具备唯一性2. 数组名是一个【指针变量】,存储当前数组在内存中的【首地址】[常量容量]:决定当前数组的容量,允许最多多少个指定数据类型存储,并且数组容量一旦确定,无法修改。

日南至 1450

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

温度PID控制PLC程序

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

【数据结构-数组】数组的相关算法

【数据结构-数组】数组的相关算法

Mount256的博客 1147

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

动态数组的实现及相关算法

创建两个指针,p指向首地址,q指向数组尾元素地址,交换二者的值,之后,p向右移动一个元素位置,q向左移动一个元素位置,循环上述过程,直到p越过了q,循环结束,此时完成了逆序。循环以上过程,直到p越过了q,循环结束,最终所有值为value的元素在数组的最左边,p地址往后的元素里就没有值为value的元素了,返回该地址。也是一样,先判断传入位置的有效性,再将该位置往后的所有元素向前挪动一个位置,此时被删除的元素被后面的元素所覆盖掉了,容纳数减一。创建两个变量,p等于数组首索引值,q等于数组尾索引值。

d6d4664948的博客 651

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数组相关算法

数组即连续,同类型的一组数据,可以通过索引读写,索引以0开始,看似简单实际上可以演变出很多算法问题 基本 public class Test { public static void main(String[] args) { int[] a={5,4,1,2,4}; System.out.println(a[0]); //所得指定索引处的值 a[0]=10; //给指定索引的元素赋新值 System.out.println(a[0]); } } 外置 public class Tes

bill的博客 131

数组相关算法题汇总

在属于数组考点系列的题目中,划分为四个常考问题:子数组问题、矩阵问题、O(n)类型问题和思维转换类型问题。 子数组问题:就是给定一个数组,围绕该数组的子数组列出诸多难题,等待我们来解答。 矩阵问题:给定一个矩阵(或者称为二维数组),围绕该矩阵列出不同方式遍历矩阵中元素等难题,等待我们来解答。 O(n)类型问题:O(n)是指时间复杂度为O(n),给定的题目题意一般很容易理解,其一般解法(俗称暴力解法,时间复杂度一般为O(n^2),甚至更高)也很简单,但是题目要求你的解法时间复杂度为O(n)。看到这些题目

qq_43103261的博客 1797

DAY07-数组及相关算法

本文介绍了C语言中数组的基本概念和使用方法。主要内容包括:1.数组是连续存储相同类型数据的构造类型,通过下标访问元素;2.数组定义格式和初始化方式;3.字符数组和字符串数组的区别;4.使用for循环遍历数组;5.数组作为函数参数的传递方式;6.重点讲解了冒泡排序和选择排序两种算法,通过示例代码演示排序过程,并优化了冒泡排序的循环次数。文章通过具体案例帮助理解数组操作及其应用场景。

学习嵌入式的人捏 784

数据结构和算法(二)——数组及其相关算法

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。

新一代螺丝工的博客 633

数组及相关算法

本文介绍了C语言中数组的基本概念和使用方法。数组是在连续内存空间中存储相同类型数据的构造数据类型,定义格式为"数据类型 数组名[容量]={初始化值}"。通过数组名和下标(0到容量-1)访问元素,容量固定不可修改。文章演示了整型和字符型数组的定义、初始化、访问和计算大小,并展示了数组与for循环的配合使用。函数可以通过数组名(地址)修改数组元素。最后介绍了两种排序算法:冒泡排序通过相邻元素比较交换实现排序,而选择排序则通过寻找最小元素进行交换。两种算法都包含优化标志以减少不必要的比较。

qq_53794305的博客 454

数组问题——数组相关算法

数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力。也就是说,想法很简单,但实现起来 可能就不是那么回事了。首先要知道数组在内存中的存储方式,这样才能真正理解数组相关的面试题。

庄小焱 804

数组相关算法总结

文章目录数组定义数组的经典题目二分法双指针法滑动窗口模拟行为 数组定义 数组是存放在连续内存空间上的相同类型数据的集合 举一个字符数组的例子,如图所示: 需要注意的两点是: 数组下标都是从0开始的 数组内存空间的地址是连续的 正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。 数组的经典题目 二分法 leetcode704-二分查找 时间复杂度: O(N) 双指针法 leetcode27-移除元素 双指针法(快慢指针法):通过一个快指针和慢指针在一个

qq_43478625的博客 230

数组相关算法题(一)

数组相关算法题: 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 中因此返回 ...

ym563099457的博客 3680

JavaSE - 数组的相关算法

JavaSE - 数组的相关算法 本节学习目标: 了解并掌握Java中随机数的生成方式; 了解常用的数组赋值算法; 了解并掌握浅拷贝与深拷贝的区别与理解 了解并掌握常用的数组查找算法; 了解并掌握常用的数组排序算法。 1. 算法简述 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的

adas5f1a51的博客 338

算法学习:数组相关

最近重新学习算法,跟着代码随想录学习。

m0_74202794的博客 286
上一篇: SSM整合
下一篇: 相关算法---链表
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值