当前位置: 首页 > news >正文

LeetCode面试题Day1|LeetCode26 删除有序数组中的重复项、LeetCode80 删除有序数组中的重复项Ⅱ

前言:

暑假实在不知道干什么了,做一下力扣的《面试经典150题》吧,记录一下学习轨迹。(如果有要打非中文竞赛或者精进一下英语水平的记得把力扣调成英文)

题目1:

指路:

. - 力扣(LeetCode)26 删除有序数组中的重复项

思路与分析:

在这里我们不难看出本题有两个点,第一个是原地修改(英文版为"in-place")显然不能再开拓空间,第二个是删除重复元素最后得到一个无重复元素数组的大小。注意:要求元素相对顺序保持一致,那么不可以排序避免导致顺序更改。题目中还给了一个k,其含义为最后符合条件的数组大小为k。我们可以从数组的大小开始入手讨论,当数组的大小为1时肯定没有重复,这时候直接输出即可。那么当数组的大小大于1时,就有元素重复的可能。我们可以从第二个元素开始与前一个元素进行比较,当两个元素不相等时收纳第二个元素,否则不做处理。那么如何保留符合条件的元素?拿到k,初始化k为1代表直接收纳原数组中第一个元素,之后遍历数组进行元素比较一直到数组遍历完成,其中满足条件的元素收纳,最后返回k即可。

代码:

1.正常做法:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int k = 1;  // 符合条件的值放的地方for (int i = 1; i < nums.size(); i++) {if (nums[i] != nums[i - 1]) {nums[k++] = nums[i];}}    return k;}
};

2.库函数(投机取巧法):

在这里用到了erase和unique两个函数,在这里这一行的意义为遍历nums数组,将不唯一的元素放在数组的最后部分,再用erase函数删掉最后这部分。

class Solution {
public:int removeDuplicates(vector<int>& nums) {nums.erase(unique(nums.begin(), nums.end()), nums.end());return nums.size();    }
};

题目2:

指路:

. - 力扣(LeetCode)80 删除有序数组中的重复项Ⅱ

思路与分析:

依旧是在原内存上删除重复元素,那么不同于上题的是允许有两个元素相等,如果有三个或者多个相等的元素那么删掉第三个及后面所有的相等的元素。换言之,例如一个数组中只有三个元素[1, 2, 2],我们无需判断第一个元素和第二个元素的关系,只需要判断第一个和第三个元素的关系即可。因此从第三个元素开始与它前面的前面的元素进行比较(假设该元素的位置是i,则判断nums[i]与nums[i-2]即可)。那么在这里我们定义两个指针分别指向第一个元素和第三个元素,当两者相等时证明第三个元素不符合规定,不收纳且将指向第三个元素的指针向后移一位,反之二者不相等则说明第三个元素符合条件此时收纳第三个元素并使指向第一个元素的指针后移一位。最后返回即可。

代码:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if (n <= 2) return n;int fast = 2; int slow = 2;while (fast < n) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];slow++;}fast++;}return slow;}
};

相关文章:

LeetCode面试题Day1|LeetCode26 删除有序数组中的重复项、LeetCode80 删除有序数组中的重复项Ⅱ

前言&#xff1a; 暑假实在不知道干什么了&#xff0c;做一下力扣的《面试经典150题》吧&#xff0c;记录一下学习轨迹。(如果有要打非中文竞赛或者精进一下英语水平的记得把力扣调成英文) 题目1&#xff1a; 指路&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;26…...

细说文件操作

你好&#xff01;感谢支持孔乙己的新作&#xff0c;本文就文件操作与大家分享我的思路。 希望能大佬们多多纠正及支持 &#xff01;&#xff01;&#xff01; 个人主页&#xff1a;爱摸鱼的孔乙己-CSDN博客 目录 1.什么是文件 1.1.程序设计文件 1.1.1.程序文件 1.1.2.数据文…...

Vue3从零开始——掌握setup、ref和reactive函数的奥秘

文章目录 一、Vue 3 组合式 API 概述二、setup​ 函数的基本使用2.1 setup​ 函数的特点2.2 setup​ 函数的基本结构2.3 实现一个简单的小demo 三、ref​ 函数的功能和应用3.1 ref​函数介绍3.2 基本使用3.2.1 定义ref​数据3.2.2 修改响应式变量 3.3 使用ref​函数实现计数器 …...

C语言练习--屏幕上打印九九乘法表

int main() { int i 0; for (i 1; i < 10; i) { int j 0; for (j 1; j <i; j) { printf(" %d*%d%2d", i, j, i * j); } printf("\n"); } return 0; }...

将tsx引入vue

按钮 vue <cl-batch-btn >新增批量</cl-batch-btn> import batch from "//modules/ad/components/ uploading/batch.vue" import ClBatchBtn from "/~/crud/src/components/batch-btn"; tsx...

前端实现签字效果+合同展示

文章目录 获取一个高度会变的元素的高度获取元素设置的 transform适配手机transform-origin: 5% 0; 的原因修改后 签字效果取消el-dialog的头部边距为什么禁止界面滚动vue3 使用 nextTick实现效果 签字判断是横是竖canvas 去掉空白部分canvas裁剪图片最终完善代码&#xff0c;可…...

[AI Embedchain] 开始使用 - 快速开始

安装 首先安装 Python 包&#xff1a; pip install embedchain安装包后&#xff0c;根据您的偏好&#xff0c;您可以选择使用以下内容&#xff1a; 开源模型 本节提供了一个快速入门示例&#xff0c;展示了如何使用 Mistral 作为开源 LLM&#xff08;大型语言模型&#xff…...

Linux网络协议.之 tcp,udp,socket网络编程(三).之多进程实现并发demon

一、fork创建进程&#xff0c;来实现多并发 这只是个demon&#xff0c;并不能用于实际项目&#xff0c;多进程&#xff0c;消耗太多资源。没有人这么玩 1、服务端代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #in…...

Java线程(练习题)

Exercise 创建三个线程&#xff1a;一个线程打印 100个A,一个线程打印 100 个 B &#xff0c;一个线程打印 100个C 输出效果&#xff1a;ABC ABC ABC…交替打印 package com.kane.exercise01;public class PrintABC implements Runnable {private static final Object lock …...

MySQL:初识数据库初识SQL建库

目录 1、初识数据库 1.1 什么是数据库 1.2 什么是MySQL 2、数据库 2.1 数据库服务&数据库 2.2 C/S架构 3、 初识SQL 3.1 什么是SQL 3.2 SQL分类 4、使用SQL 4.1 查看所有数据库 4.1.2 语句解析 4.2 创建数据库 4.2.1 if not exists校验 4.2.2 手动明确字符集…...

关于Redis的集群面试题

问题一&#xff1a;Redis的多数据库机制&#xff0c;了解多少&#xff1f; Redis支持多个数据库&#xff0c;并且每个数据库是隔离的不能共享&#xff0c;单机下的redis可以支持16个数据库&#xff08;db0~db15&#xff09;;若在Redis Cluster集群架构下&#xff0c;则只有一个…...

带头双向循环链表(一)

今天我们来学习带头双向链表 带头双向循环链表的解释 带头双向链表顾名思义就是&#xff1a; 1、带了一个“头”在数据结构中的意思就是加了一个"哨兵位"。 2、这个链表是双向循环的链表即可以通过任意的节点访问它的上一个和下一个的节点也能通过链表的头直接访…...

深入理解Win32K.sys的工作原理

https://download.csdn.net/download/sitelist/89621815 Windows Resource Kits 2003.rar工具下载&#xff0c;因为有windows server 2003源代码&#xff0c;并可以编译成iso&#xff0c;所以对于研究windows系统很有帮助&#xff0c;上吗是2003的研究工具&#xff0c;不知道源…...

力扣面试经典算法150题:删除有序数组中的重复项

删除有序数组中的重复项 今天的题目是力扣面试经典150题中的数组的简单题: 删除有序数组中的重复项 题目链接&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一…...

文本加密工具类-支持MD5、SHA1、SHA256、SHA224、SHA512、SHA384、SHA3、RIPMD160算法

文本加密工具类 1.算法简介1.1 MD51.2 SHA-11.3 SHA-2&#xff08;推荐使用&#xff09;1.4 SHA-3&#xff08;推荐使用&#xff09;1.5 RIPEMD-160 2.工具类案例2.1POM导入2.2代码编写2.3 输出示例 1.算法简介 1.1 MD5 MD5 (Message-Digest Algorithm 5) 描述&#xff1a;M…...

LVS集群中的负载均衡技术

目录 一、LVS技术原理 二、NAT模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、软件安装与启用 3、测试 三、DR模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、解决vip响应问题 3、测试 四、ipvsadm命令及参数 1、管理集群服务&#x…...

Java网络编程——HTTP协议原理

协议 我们在网上冲浪时&#xff0c;会在浏览器地址栏输入一个网址&#xff0c;然后就能打开网页了。比如&#xff0c;输入 https://www.douban.com/就可以访问到豆瓣的主页&#xff1a; 那么大家是否好奇&#xff1a;https 是什么意思&#xff0c;作用又是什么呢&#xff1f;…...

java之多线程篇

一、基本概念 1.什么是线程&#xff1f; 线程就是&#xff0c;操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。简单理解就是&#xff1a;应用软件中互相独立&#xff0c;可以同时运行的功能 2.什么是多线程&#xff1f; 有了多线…...

【深度学习】TTS,CosyVoice,训练脚本解析

https://github.com/FunAudioLLM/CosyVoice/blob/main/examples/libritts/cosyvoice/run.sh Bash 脚本是一个语音合成(TTS)训练和推理的完整流水线。让我们逐步解析这个脚本的各个部分。 初始化部分 #!/bin/bash # Copyright 2024 Alibaba Inc. All Rights Reserved. . ./…...

《Unity3D网络游戏实战》学习与实践

纸上得来终觉浅&#xff0c;绝知此事要躬行~ Echo 网络上的两个程序通过一个双向的通信连接实现数据交换&#xff0c;这个连接的一端称为一个Socket “端口”是英文port的意译&#xff0c;是设备与外界通信交流的出口。每台计算机可以分配0到65535共65536个端口 每一条Sock…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...