算法day01_ 27. 移除元素、977.有序数组的平方

news2025/1/23 17:44:26

推荐阅读

从零开始学数组:深入浅出,带你掌握核心要点
初探二分法
再探二分法


系统的纪录一下刷算法的过程,之前一直断断续续的刷题,半途而废,现在重新开始。话不多说,开冲!

27.移除元素

题目

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

说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以**「引用」**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

image.png

思路

暴力解法主要是两层for循环,一层for循环找到val,一层for循环用于覆盖val,将val后的所有的数组元素全部前移。

-1516976305.jpg

双指针法主要是通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

  • 快指针用于寻找新数组元素的值
  • 慢指针用于来确定新数组元素的下标

283705997.jpg

解法

暴力解法

代码实现

class Solution {
    public int removeElement(int[] nums, int val) {
        int length=nums.length;
        for(int i=0; i<length;i++){
            if(nums[i]==val){
                for(int j=i+1;j<length;j++){
                    nums[j-1]=nums[j];
                }
                i--;
                length--;
            }
        }
        return length;
    }
}
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

快慢指针解法

代码实现

class Solution {
    public int removeElement(int[] nums, int val) {
        int slowIndex=0;
        for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
            if(nums[fastIndex]!=val){
                nums[slowIndex]=nums[fastIndex];
                slowIndex++;
            }
        }
        return slowIndex;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

977.有序数组的平方

题目

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

image.png

思路

该题目中给的序列为非递减序列,即有可重复值的递增序列。
暴力解法、快慢指针法都是先平方后排序。
双指针法,使用start下标和end下标进行指向,并将元素平方后的大小判断的结果填入新的数组,在新数组中,从后往前依次填入数组元素。

  • 若 nums[startIndex]*nums[startIndex]<nums[endIndex]*nums[endIndex],那么result[k–]=nums[endIndex]*nums[endIndex];
  • 若nums[startIndex]*nums[startIndex]>nums[endIndex]*nums[endIndex],那么 result[k–]=nums[startIndex]*nums[startIndex];

144100158.jpg

解法

暴力解法

代码示例:

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] newNums=new int[nums.length];
        for(int i=0;i<nums.length;i++){
            newNums[i]=nums[i]*nums[i];
        }
        Arrays.sort(newNums);
        return newNums;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
快慢指针法

代码示例:

class Solution {
    public int[] sortedSquares(int[] nums) {
        int fastIndex=0;
        int slowIndex=0;

        for(fastIndex=0;fastIndex<nums.length;fastIndex++){
            nums[slowIndex]=nums[fastIndex]*nums[fastIndex];
            slowIndex++;
        }
        Arrays.sort(nums);
        return nums;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
双指针法

代码示例

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] result=new int[nums.length];
        int k=nums.length-1;
        int startIndex=0;
        int endIndex=nums.length-1;
        while(startIndex<=endIndex){
            if(nums[startIndex]*nums[startIndex]<nums[endIndex]*nums[endIndex]){
                result[k--]=nums[endIndex]*nums[endIndex];
                endIndex--;
            }else{
                result[k--]=nums[startIndex]*nums[startIndex];
                startIndex++;
            }
        }
        return result;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

在这里插入图片描述

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

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

相关文章

Maven编译报processing instruction can not have PITarget with reserveld xml name

在java项目中&#xff0c;平时我们会执行mvn clean package命令来编译我们的java项目&#xff0c;可是博主今天执行编译时突然报了 processing instruction can not have PITarget with reserveld xml name 这个错&#xff0c;网上也说法不一&#xff0c;但是绝大绝大部分是因…

(二十)devops持续集成开发——使用jenkins的docker插件完成docker项目的流水线发布

前言 本节内容主要介绍jenkins如何集成docker插件&#xff0c;完成docker项目的流水线发布&#xff0c;在前面的章节中我们也介绍过docker项目的发布&#xff0c;可直接通过shell命令调用本地的docker服务完成docker项目的发布&#xff0c;本节内容我们使用docker插件来完成do…

LeetCode--代码详解 43.字符串相乘

43.字符串相乘 题目 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2",…

ARM系列 -- 虚拟化(四)

今天来看看虚拟中断。 在一个非虚拟化的系统中&#xff0c;操作系统可以直接访问GIC的寄存器&#xff0c;并且处理GIC的物理中断接口&#xff08;physical interrupt interface&#xff09;。 但是在一个虚拟化的系统中&#xff0c;不是这样。Guest OS并不知道它运行在虚拟系…

ETH网络中的账户

ETH网络中的账户 Externally owned accounts (EOA) - 外部账户 由用户控制&#xff0c;我们导入助记词创建的账户就属于此类账户。 Contract accounts (smart contracts) - 合约账户 合约账户由以太坊虚拟机执行的代码控制。它也被称为智能合约。合约帐户有相关的代码和数据存…

防火墙的内容安全

目录 1. 内容安全 1.1 IAE引擎 DPI---深度包检测技术 DFI---深度流检测技术 结论(优缺点)&#xff1a; 1.2 入侵防御&#xff08;检测&#xff09;(IPS) IPS的优势: 入侵检测的方法: 入侵检测的流程 签名 查看预定义签名的内容 新建自定义签名 入侵防御的检测…

uniapp android 原生插件开发-测试流程

前言 最近公司要求研究一下 uniapp 的 android 原生插件的开发&#xff0c;为以后的工作做准备。这篇文章记录一下自己的学习过程&#xff0c;也帮助一下有同样需求的同学们 : ) 一、下载安装Hbuilder X , Android studio&#xff08;相关的安装配置过程网上有很多&#xff0c;…

width:100%和width:auto有啥区别

项目中使用了with属性&#xff0c;突然好奇auto 和 100% 的区别&#xff0c;特地搜索实践总结了一下观点 一、 width属性介绍二、 代码带入三、 分析比较四、 总结 一、 width属性介绍 width 属性用于设置元素的宽度。width 默认设置内容区域的宽度&#xff0c;但如果 box-siz…

XXE 漏洞简单研究

近期在做个基础的 web 常见漏洞的 ppt&#xff0c;主要参考 OWASP TOP 10 2017RC2&#xff0c;此版本中增加了 XXE 攻击&#xff0c;所以自己简单的研究下 XXE 攻击。XXE&#xff08;XML External Entity&#xff09;XML 外部实体&#xff0c;当前端和后端通信数据采用 xml&…

2. Kubernetes 核心数据结构

1. Group、Version、Resource 核心数据结构 理解 Kubernetes 核心数据结构&#xff0c;在阅读源码时可以事半功倍并能够深刻理解 Kubernetes 核心设计。在整个 Kubernetes 体系架构中&#xff0c;资源是 Kubernetes 最重要的概念&#xff0c;可以说 Kubernetes 的生态系统都围…

28. 找出字符串中第一个匹配项的下标(力扣LeetCode)

文章目录 28. 找出字符串中第一个匹配项的下标题目描述暴力KMP算法 28. 找出字符串中第一个匹配项的下标 题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。…

【PHP】Workerman开源应用容器的GatewayWorker 与 iOS-OC对接

Workerman 开源高性能PHP应用容器 workerman是一款开源高性能PHP应用容器,它大大突破了传统PHP应用范围,被广泛的用于互联网、即时通讯、APP开发、硬件通讯、智能家居、物联网等领域的开发。 PHPSocket.io PHP版本的socket.io,具有良好的客户端兼容性,常用于即时通讯领域…

在CentOS上使用Docker搭建Halo博客并实现远程访问的详细指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Docker部署Halo1.1 检查Docker版本1.2 在Docker中部署Halo 二. Linux安装Cpol…

亚信安慧AntDB数据库与流式处理的有机融合

流式处理的概念 2001年9月11日&#xff0c;美国世贸大楼被袭击&#xff0c;美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司&#xff0c;承担了大量基础支撑软件研发的任务。其中2009年正式发布的IBM InfoSphere Streams&#xff0c;就是…

文献阅读:秀丽隐杆线虫的神经肽能连接组

文献介绍 「文献题目」 The neuropeptidergic connectome of C. elegans 「研究团队」 William Schafer&#xff08;MRC分子生物学实验室&#xff09; 「发表时间」 2023-11-15 「发表期刊」 Neuron 「影响因子」 16.2 「DOI」 10.1016/j.neuron.2023.09.043 摘要 人们正在…

华为数通方向HCIP-DataCom H12-821题库(单选题:481-500)

第481题 以下关于基于SD-WAN思想的EVPN互联方案的描述,错误的是哪一项? A、通过部署独立的控制面,将网络转发和控制进行了分离,从而实现了网络控制的集中化 B、通过对WAN网络抽象和建模,将上层网络业务和底层网络具体实现架构进行解耦,从而实现网络自动化 C、通过集中的…

GPM 是什么?

G、P、M是Go调度器的三个核心组件&#xff0c;各司其职。在它们精密地配合下&#xff0c;Go调度器得以高效运转&#xff0c;这也是Go天然支持高并发的内在动力。今天这篇文章我们来深入理解GPM模型。 先看G&#xff0c;取goroutine的首字母&#xff0c;主要保存goroutine的一些…

团结引擎——DotNet Wasm方案

参考&#xff1a;团结引擎 DotNet WebAssembly(Wasm) 介绍 一、当前编译流程 通过IL2CPP将C#转成C/C&#xff1b;通过Emscripen将C/C转成WebAssembly&#xff1b; 二、 当前存在问题 IL2CPP在处理类似泛型、反射结构时&#xff0c;由于缺少运行时信息&#xff0c;必须全量生…

备战蓝桥杯Day18 - 双链表

一、每日一题 蓝桥杯真题之工作时长 这个题写代码做的话很麻烦&#xff0c;而且我也不一定能写出来&#xff0c;所以我直接就是用的excel来计算的时间和。 使用excel的做法 1.先把文件中的时间复制到excel中。 2.把日期和时间分到两列。 分成两列的步骤&#xff1a; 选中要…

让两个电脑通信的方法(TCP连接,UDP连接,C/S架构)

目录 TCP-面向连接UDP-面向无连接C/S架构服务器和客户端的工作过程C/S架构例子 让两个电脑通信的方法是 在C/S的基础上&#xff0c;采用TCP和UDP的方式连接 TCP-面向连接 UDP-面向无连接 C/S架构 服务器和客户端的工作过程 C/S架构例子 服务器与客户端通信的过程类似公司与客户…