【算法】双指针思想

一、Leetcode27.移除元素

1.题目描述

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

2.暴力破解
public int removeElement(int[] nums, int val) {int size = nums.length;for (int i = 0; i < size; i++) {if (nums[i] == val) {for (int j = i + 1; j < nums.length; j++) {nums[j - 1] = nums[j];}size--;i--;}}return size;}
  • size–: 当遇到了数组中和目标相等的元素,说明是要移除的,所以size–
  • i–: 因为在遇到了需要移除的元素之后,是用后面的元素覆盖了前面的元素,所以当进入了if判断之后,说明后面一个待比较的新的元素已经移动到前一位去了,所以i–,才可以再比较到这个移动到了前面的新的元素。
3.双指针
  public static int removeElementDoublePoint(int[] nums, int val) {int slow = 0;for (int fast = 0; fast < nums.length; fast++) {if (nums[fast] != val) {nums[slow] = nums[fast];slow++;}}return slow;}

定义一个快指针fast,用来正常的遍历元素;
定义一个慢指针slow,用来指向新的数组的元素(删除了目标元素后的)
没有遇到目标元素时所指向的元素(符合的元素),都存入新数组(slow指向)

二、Leetcode977.有序数组的平方

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

示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
1.暴力破解

遍历数组的每一个元素,算出平方。再对结果进行排序

    public static int[] sortedSquares(int[] nums) {for (int i = 0; i < nums.length; i++) {nums[i] = nums[i] * nums[i];}return insertSort(nums);}/*** 选择排序** @param nums* @return*/private static int[] selectSort(int[] nums) {for (int j = 0; j < nums.length; j++) {int minValueIndex = j;for (int k = j + 1; k < nums.length; k++) {// 找出索引最小的minValueIndex = nums[k] < nums[minValueIndex] ? k : minValueIndex;}//把找到的下标和第j个元素交换 nums[j] nums[minValueIndex]int temp = nums[j];nums[j] = nums[minValueIndex];nums[minValueIndex] = temp;}return nums;}/*** 插入排序** @param nums* @return*/private static int[] insertSort(int[] nums) {for (int i = 0; i < nums.length; i++) {for (int j = i; j > 0; j--) {if (nums[j] < nums[j - 1]) {int temp = nums[j];nums[j] = nums[j - 1];nums[j - 1] = temp;} else {break;}}}return nums;}
2.双指针

头指针和尾指针,头指针从下标0开始,尾指针从最后一个元素(下标nums.length-1)开始,头指针前进,尾指针后退,直到相遇就是遍历完了;遍历的过程中,每次都取出更大的那个数,存入一个新的数组中,从最后一个下标往前存,因为是非递减的。

    public static int[] sortedSquares(int[] nums) {int start = 0;int end = nums.length - 1;int[] sortedSquareNums = new int[nums.length];int index = nums.length - 1;while (start <= end) {int startSquare = nums[start] * nums[start];int endSquare = nums[end] * nums[end];if (startSquare > endSquare) {sortedSquareNums[index] = startSquare;start++;} else {sortedSquareNums[index] = endSquare;end--;}index--;}return sortedSquareNums;}

前提是数组是非递减的,如果是乱序的,此方案行不通

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

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

相关文章

【C语言】详解预处理

、 最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 •✨说在前面 &#x1f34b;预定义符号 &#x1f34b; #define • &#x1f330;1.#define定义常…

ControlNet官方资源链接【ControlNet论文原文】【持续更新中~】

ControlNet官方资源链接 ControlNet论文原文&#xff1a;https://arxiv.org/abs/2302.05543ControlNet官方GitHub&#xff1a;https://github.com/lllyasviel/ControlNetControlNet 1.1官方GitHub&#xff1a;https://github.com/lllyasviel/ControlNet-v1-1-nightlyControlNe…

phpMyAdmin增加自定义IP登录教程

phpMyAdmin增加自定义IP登录教程 1、打开phpMyAdmin目录&#xff0c; 在此目录下是否有config.sample.inc.php文件&#xff0c;如果存在&#xff0c;那么将其改名为config.inc.php&#xff08;为避免修改失误所造成的损失&#xff0c;强烈建议先备份config.sample.inc.php文件…

4_C语言复杂表达式与指针高级应用

指针数组与数组指针 字面意思来理解指针数组与数组指针 指针数组的实质是一个数组&#xff0c; 这个数组中存储的内容全部是指针变量。 数组指针的实质是一个指针&#xff0c; 这个指针指向的是一个数组。 分析指针数组与数组指针的表达式 int * p[5]; 指针数组 int (*p)[5]…

等保测评考试重点题库分享上

一、单选题 1、下列不属于网络安全测试范畴的是&#xff08;C&#xff09; A&#xff0e;结构安全 B.便捷完整性检查 C.剩余信息保护 D.网络设备防护 2、下列关于安全审计的内容说法中错误的是&#xff08;D&#xff09; A&#xff0e;应对网络系统中的网络设备运行情况、网…

UnityWebGL使用sherpa-ncnn实时语音识别

k2-fsa/sherpa-ncnn&#xff1a;在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 (github.com) 如果是PC端可以直接使用ssssssilver大佬的 https://github.com/ssssssilver/sherpa-ncn…

bind、call和apply

bind、call和apply都是 JavaScript 中用于改变函数执行上下文&#xff08;即函数内部的this指向&#xff09;的方法&#xff0c;它们的主要区别如下&#xff1a; bind 方法会创建一个新的函数&#xff0c;并将这个函数的执行上下文绑定到指定的对象。它不会立即执行函数&#x…

[嵌入式系统-62]:RT-Thread-内核:多核CPU SMP的支持与移植

目录 RT-Thread SMP 介绍与移植 1. 多核的优点 2. 多核启动 2.1 概述 2.2 CPU0 启动流程 2.3 次级 CPU 启动流程 3. 多核调度 3.1 任务特性 3.2 调度策略 4. SMP 内核接口 处理器间中断 IPI OS Tick 自旋锁 spinlock 任务绑定 4. SMP移植说明 编译环境准备 创…

配置网关,解决本地连接不上Linux虚拟机的问题

在Window环境下&#xff0c;使用远程终端工具连接不了VMware搭建的Linux虚拟机&#xff08;CentOS 7&#xff09;&#xff0c;并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题&#xff1a; 1 查看虚拟机网关地址 在VMware虚拟机上…

opencv merge使用

OpenCV 中的 merge 函数用于将多个单通道或多通道的图像合并成一个多通道的图像。 在C中&#xff0c;OpenCV的merge函数也提供了相同的功能&#xff0c;用于合并多个单通道或多通道的图像。下面是一个使用C的示例&#xff1a; #include <opencv2/opencv.hpp> #include &…

数据库开发关键之与DQL查询语句有关的两个案例

案例 案例1 条件分页查询 查看项目经理提供给我们的需求文档 模糊匹配的含义是 只要包含"张"就可以 use dduo;-- 按照需求完成员工管理的条件分页查询 根据输入条件 查询第一页的数据 每页展示10条记录 -- 输入条件&#xff1a; -- 姓名&#xff1a; 张 -- 年龄&…

基于YOLOv8的水稻虫害识别系统,加入BiLevelRoutingAttention注意力进行创新优化

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的水稻虫害识别&#xff0c;阐述了整个数据制作和训练可视化过程&#xff0c;并加入BiLevelRoutingAttention注意力进行优化&#xff0c;最终mAP从原始的 0.697提升至0.732 博主简介 AI小怪兽&#xff…

SQL-索引篇整理

什么样的列适合建索引&#xff1f; 适合创建索引的列:主键、频繁进行范围检索的列、时常进行多表连接的列、数据量大的表,数据差异大的列。 索引优缺点 索引是数据库中用于提高数据检索性能的排好序的数据结构。它类似于书籍的目录&#xff0c;通过建立特定的数据结构将列或…

c语言从入门到函数速成(2)

温馨提醒&#xff1a;本篇文章适合人群&#xff1a;刚学c又感觉那个地方不怎么懂的同学以及以及学了一些因为自身原因停学一段时间后又继续学​​​c的学 好&#xff0c;正片开始&#xff01; 数组 概念&#xff1a;数组中存放的是1个或者多个数据&#xff0c;但是数组元素个…

由于找不到msvcr110.dll,无法继续执行代码的解决方法

在日常使用计算机的过程中&#xff0c;可能会遇到系统提示缺少msvcr110.dll文件的情况&#xff0c;这一问题往往导致某些应用程序无法正常运行。幸运的是&#xff0c;有多种方法可以有效应对这一困境&#xff0c;帮助您的计算机恢复顺畅运作。以下是解决计算机丢失msvcr110.dll…

JavaWeb--1.Servlet

Servlet&#xff08;基础&#xff09; 1、配置依赖&#xff1a; ​ 在pom.xml文件中加入相关依赖 <dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0&l…

python直接发布到网站wordpress之二发布图片

在我的上一篇文章中已经给出了python操作wordpress的环境和发布文字的教程&#xff1a; python直接发布到网站wordpress之一只发布文字-CSDN博客 本篇实现发布带图片的内容&#xff0c;无图无真相嘛。 直接上代码&#xff1a; from wordpress_xmlrpc.methods.media import …

什么是CI/CD流水线

在软件开发中&#xff0c;流水线系统&#xff08;通常被称为CI/CD流水线或部署流水线&#xff09;是一种自动化的过程&#xff0c;用以快速、可靠地将软件从开发阶段引向生产阶段。CI代表持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;而CD代表持续交付&…

Python数据分析案例43——Fama-French回归模型资产定价(三因子/五因子)

案例背景 最近看到要做三因子模型的同学还挺多的&#xff0c;就是所谓的Fama-French回归模型&#xff0c;也就是CAMP资本资产定价模型的升级版&#xff0c;然后后面还升级为了五因子模型。 看起来眼花缭乱&#xff0c;其实抛开金融资产定价的背景&#xff0c;从机器学习角度来…

HTML_CSS学习:常用文本属性

一、文本颜色 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>文本颜色</title><style>div{font-size: 90px;}.atguigu1{color: #238c20;}.atguigu2{color: rgb(2…