【经典算法OJ题讲解】
1.移除元素

方法1:双指针优化
思路
如果要移除的元素恰好在数组的开头,例如序列 [1,2,3,4,5],val 为 1时,我们需要把每一个元素都左移一位。注意到题目中说:「元素的顺序可以改变」。实际上我们可以直接将最后一个元素 5 移动到序列开头,取代元素 1,得到序列 [5,2,3,4],同样满足题目要求。这个优化在序列中 val 元素的数量较少时非常有效。实现方面,我们依然使用双指针,两个指针初始时分别位于数组的首尾,向中间移动遍历该序列。
算法
如果左指针 left 指向的元素等于 val,此时将右指针 right 指向的元素复制到左指针 left 的位置,然后右指针 right 左移一位。如果赋值过来的元素恰好也等于 val,可以继续把右指针 right 指向的元素的值赋值过来(左指针 left 指向的等于 val 的元素的位置继续被覆盖),直到左指针指向的元素的值不等于 val 为止。
当左指针 left 和右指针 right 重合的时候,左右指针遍历完数组中所有的元素。
这样的方法两个指针在最坏的情况下合起来只遍历了数组一次。与方法一不同的是,方法二避免了需要保留的元素的重复赋值操作。
实现代码
int removeElement(int* nums, int numsSize, int val)
{int left=0,right=numsSize;while(left<right){if(nums[left]==val){nums[left]=nums[right-1];right--;}else{left++;}}return left;
}
2.合并两个有序数组
方法1:逆向双指针
算法
观察可知,nums1的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者之中的较大者放进 nums1 的最后面。
严格来说,在此遍历过程中的任意一个时刻,nums1 数组中有 m−p1−1 个元素被放入 nums1 的后半部,nums2数组中有 n−p2−1n个元素被放入 nums1的后半部,而在指针 p1 的后面,nums1 数组有 m+n−p1−1 个位置。由于 m+n−p1−1≥m−p1−1+n−p2−1 等价于 p2≥−1 永远成立,因此 p1 后面的位置永远足够容纳被插入的元素,不会产生 p1 的元素被覆盖的情况。
实现代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{int p1 = m - 1, p2 = n - 1;int tail = m + n - 1;int cur;while (p1 >= 0 || p2 >= 0) {if (p1 == -1) {cur = nums2[p2--];} else if (p2 == -1) {cur = nums1[p1--];} else if (nums1[p1] > nums2[p2]) {cur = nums1[p1--];} else {cur = nums2[p2--];}nums1[tail--] = cur;}
}
本篇文章只介绍了题目的部分解法。如果本篇有补充的地方,欢迎私信我或在评论区指出,期待与你们共同进步。
相关文章:
【经典算法OJ题讲解】
1.移除元素 经典算法OJ题1: 移除元素 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-element/desc…...
大数据面试题之Zookeeper面试题
目录 1、介绍下Zookeeper是什么? 2、Zookeeper有什么作用?优缺点?有什么应用场景? 3、Zookeeper的选举策略,leader和follower的区别? 4、介绍下Zookeeper选举算法 5、Zookeeper的节点类型有哪些?分别作用是什么? 6、Zookeeper的节点数怎么设置比较好? …...
JVM 内存区域
一、运行时数据区域 Java 虚拟机在执行 Java 程序的过程中,会把它管理的内存划分成若干个不同的数据区域。 JDK 1.8 和之前的版本略有不同,这里介绍 JDK 1.7 和 JDK 1.8 两个版本。 JDK 1.7: 线程私有: 程序计数器虚拟机栈本地…...
全网最强剖析Spring AOP底层原理
相信各位读者对于Spring AOP的理解都是一知半解,只懂使用,却不懂原理。网上关于Spring AOP的讲解层出不穷,但是易于理解,让人真正掌握原理的文章屈指可数。笔者针对这一痛点需求,决定写一篇关于Spring AOP原理的优质博…...
Vscode中的行尾序列CRLF/LF不兼容问题
最近开发的的时候,打开项目文件经常会出现爆红错误提示信息,显示如下图: 这东西太烦人了,毕竟谁都不希望在遍地都是爆红的代码里写东西,就像能解决这个问题,根据提示可以知道这是vscode中使用的prettier插件…...
常见加密方式:MD5、DES/AES、RSA、Base64
16/32位的数据,最有可能就是使用md5加密的 使用对称加密的时候,双方使用相同的私钥 私钥:单独请求/隐藏在前端的隐藏标签当中 二、RSA非对称密钥加密 公钥加密,私钥解密 私钥是通过公钥计算生成的 加密解密算法都在js源文件当…...
如何在 C++/Qt/CMake 项目中构建 Rust 代码
问题描述 我有一个使用 CMake 构建的现有 C/Qt 项目,我想开始添加 Rust 代码,并能够从主 C 代码库中调用这些 Rust 代码。应该如何组织项目结构? 现有项目结构 ./CMakeLists.txt ./subproject-foo/CMakeLists.txt ./subproject-foo/src/..…...
封装了一个优雅的iOS转场动画
效果图 代码 // // LBTransition.m // LBWaterFallLayout_Example // // Created by mac on 2024/6/16. // Copyright © 2024 liuboliu. All rights reserved. //#import "LBTransition.h"interface LBPushAnimation:NSObject<UIViewControllerAnimated…...
数据中心技术:大数据时代的机遇与挑战
在大数据时代,数据中心网络对于存储和处理大量信息至关重要。随着云计算的出现,数据中心已成为现代技术的支柱,支持社交媒体、金融服务等众多行业。然而,生成和处理的大量数据带来了一些挑战,需要创新的解决方案。在这…...
29、架构-技术方法论之向微服务迈进
治理:理解系统复杂性 微服务架构的引入增加了系统的复杂性,这种复杂性不仅体现在技术层面,还包括组织、管理和运维等各个方面。本节将详细探讨微服务架构的复杂性来源,并介绍一些应对复杂性的治理策略。 1. 什么是治理 治理是指…...
点云处理实操 1. 求解点云法向
目录 一、点云法向的定义 二、如何计算计算法向量 三、实操 四、代码 main.cpp CMakeList.txt 一、点云法向的定义 点云法向量是指点云中某个点的局部表面法向量(Normal Vector)。法向量在三维空间中用来描述表面在该点处的方向属性,它是表面几何特征的重要描述工具。…...
XSS+CSRF组合拳
目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 (案例中将使用cms靶场来进行演示) 在实战中CSRF利用条件十分苛刻,因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…...
PasteSpiderFile文件同步管理端使用说明(V24.6.21.1)
PasteSpider作为一款适合开发人员的部署管理工具,特意针对开发人员的日常情况做了一个PasteSpiderFile客户端,用于windows上的开发人员迅速的更新发布自己的最新代码到服务器上! 虽然PasteSpider也支持svn/git的源码拉取,自动编译…...
NLP中两种不同的中文分词形式,jieba和spaCy
1. jieba分词 import jiebatext在中国古代文化中,书法和绘画是艺术的重要表现形式。古人常说,‘文字如其人’,通过墨迹可以窥见作者的性情和气质。而画家则以笔墨搏击,表现出山川河流、花鸟虫鱼的灵动。这些艺术形式不仅仅是技艺…...
【数据库】四、数据库编程(SQL编程)
四、数据库编程 另一个大纲: 5.1存储过程 5.1.1存储过程基本概念 5.1.2创建存储过程 5.1.3存储过程体 5.1.4调用存储过程 5.1.5删除 5.2存储函数 5.2.1创建存储函数 5.2.2调用存储函数 5.2.3删除存储函数 目录 文章目录 四、数据库编程1.SQL编程基础1.1常量1.2变…...
17.RedHat认证-Ansible自动化运维(下)
17.RedHat认证-Ansible自动化运维(下) 这个章节讲ansible的变量,包括变量的定义、变量的规则、变量范围、变量优先级、变量练习等。 以及对于tasks的控制,主要有loop循环作业、条件判断等 变量 介绍 Ansible支持变量功能,能将value存储到…...
React Suspense的原理
React Suspense组件的作用是当组件未完成加载时,显示 fallback 组件。那么 Suspense 是如何实现的呢?React 的渲染是通过 Fiber 进行的,Suspense 的更新机制也是要围绕 Fiber 架构进行的。Suspense 是由两部分组成,实际 UI 子组件…...
React的生命周期函数详解
import React,{Component} from "react";import SonApp from ./sonAppclass App extends Component{state{hobby:爱吃很多好吃的}// 是否要更新数据,这里返回true才会更新数据shouldComponentUpdate(nextProps,nextState){console.log("app.js第一步…...
DoubleSummaryStatistics 及其相关类之-简介
1. DoubleSummaryStatistics 使用简介 在Java 8中,DoubleSummaryStatistics 类被引入作为 java.util 包的一部分。它是一个用于收集统计数据(如计数、最小值、最大值、和、平均值等)的类,特别适用于处理 double 类型的数据。 Do…...
java线程间的通信 - join 和 ThreadLocal
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
LSTM时间序列预测实战:从数据预处理到模型调优全解析
1. 项目概述:当时间序列遇上LSTM在数据分析与预测的领域里,时间序列预测一直是个既经典又充满挑战的课题。无论是金融市场的股价波动、电商平台的销量起伏,还是工业设备的传感器读数、城市交通的流量变化,这些按时间顺序排列的数据…...
CloudCompare点云滤波保姆级教程:从低通到CSF,7种方法一次搞定(附避坑指南)
CloudCompare点云滤波实战指南:7大核心方法与避坑策略 点云数据处理是三维重建、地形测绘和工业检测等领域的关键环节。面对海量且带有噪声的原始点云,如何高效筛选有效信息成为每个从业者的必修课。CloudCompare作为开源点云处理利器,其丰富…...
Linux MySQL服务器SSH多端口配置:解决22端口禁直连,兼顾安全与运维
公司Linux服务器(尤其是MySQL数据库服务器)出于安全管控,明确禁止直连22端口,要求所有SSH登录必须使用自定义端口;但22端口又不能修改或关闭,需保留给堡垒机、安全审计等核心服务使用。一边是安全策略的硬性…...
终极Anno 1800模组加载器:5分钟轻松定制你的游戏体验
终极Anno 1800模组加载器:5分钟轻松定制你的游戏体验 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirrors/an/a…...
Midjourney葡萄酒视觉叙事术(从葡萄藤到酒标的一站式AI印相工作流)
更多请点击: https://intelliparadigm.com 第一章:Midjourney葡萄酒视觉叙事术(从葡萄藤到酒标的一站式AI印相工作流) 在数字酒庄时代,视觉叙事已成为品牌差异化的核心引擎。Midjourney 不再仅是图像生成工具…...
日常常见轻微刮花,居家随手就能修
手机屏幕刮花是很多人都会遇到的烦恼,尤其是没有贴钢化膜的手机,日常放置在口袋、背包里,很容易被钥匙、硬币、纸巾碎屑等硬物划出细小划痕。这些划痕虽然不影响正常使用,但看着十分碍眼,不少人会想着换屏幕࿰…...
Mac上编译C语言的简易方法
1、 null 2、 在 Mac OS X 系统中,可通过 Xcode 学习和编写 C 语言程序。 3、 在Xcode中运行C语言程序需先创建项目,然后在项目中添加源代码文件。 4、 启动 Xcode,点击创建新项目以新建一个工程,具体操作所示。 5、 选择需创建…...
Softether实战:用它把家里旧电脑变成公司远程访问网关,支持Win/Mac/iOS/Android全平台
利用SoftEther实现跨平台远程办公网关搭建指南 引言 在数字化办公日益普及的今天,远程访问企业内部资源已成为许多企业的刚需。传统商业解决方案往往价格昂贵且配置复杂,而基于SoftEther的开源方案则提供了一种高性价比的替代选择。本文将详细介绍如何利…...
面试题:评估指标详解——NLP 常用评估指标、BLEU、ROUGE、BLEU 和 ROUGE 区别全解析
1. 为什么“评估指标”是大模型面试里的高频题?1.1 面试官真正想听的,不只是定义很多人一看到“评估指标”就开始背 Accuracy、Precision、Recall、F1、BLEU、ROUGE,但如果只是把名词丢出来,回答往往会显得很散。面试官真正想听的…...
粮食安全政策托底,农业ETF(562900.SH)交易活跃度升温
5月14日,A股农业板块迎来温和上行,易方达农业ETF(562900.SH)收报0.756元,涨幅0.93%,跑赢跟踪标的中证现代农业指数0.85%的涨幅。数据显示,该ETF当日量比为1.13,换手率达9.54%&#x…...
