LeetCode面试经典150题(day 2)

26. 删除有序数组中的重复项

难度:简单

   给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 

    示例 1:

    输入:nums = [1,1,2]
    输出:2, nums = [1,2,_]
    解释:函数应该返回新的长度 2,并且原数组 nums 的前两个元素被修改为 1, 2 。
    不需要考虑数组中超出新长度后面的元素。
    

    示例 2:

    输入:nums = [0,0,1,1,1,2,2,3,3,4]
    输出:5, nums = [0,1,2,3,4]
    解释:函数应该返回新的长度 5,并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。不需要考虑数组中超出新长度后面的元素。
    

思路:

比较 p 和 q 位置的元素是否相等。

如果相等,q 后移 1 位 如果不相等,将 q 位置的元素复制到 p+1 位置上,p 后移一位,q 后移 1 位 重复上述过程,直到 q 等于数组长度。

返回 p + 1,即为新数组长度。

 

 

代码:

class Solution {public int removeDuplicates(int[] nums) {int j = 0;for (int i = 1; i < nums.length; i++) {if(nums[j] != nums[i]) {nums[++j] = nums[i];}}return j+1;}
}

运行结果:

 

80. 删除有序数组中的重复项 II 

难度:中等

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例 1:

输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3]
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。

 思路:

这题是上一题的拓展,我们依旧可以采用上一题的思路:双指针,不过我们可以定义一个flag表示该元素是否重复,当两个指针的元素进行比较是否相等,如果相等,将flag置为false,表示该元素已经出现过一次了,下次出现只需要看flag是否为true,不为true则跳过该元素


代码:

class Solution {public int removeDuplicates(int[] nums) {boolean flag = true;int j = 0;for( int i = 1; i < nums.length ; i++ ) {if(nums[j] != nums[i]) {nums[++j] = nums[i];flag = true;}else if(nums[j] == nums[i] && flag){nums[++j] = nums[i];flag = false;}}return j+1;}
}

运行结果:

 

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

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

相关文章

matlab 点云精配准(2)——point to plane ICP(点到面的ICP)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、初始位置2、配准结果四、参考链接五、测试数据本文由CSDN点云侠原创,matlab 点云精配准(2)——point to plane ICP(点到面的ICP)。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一…

Linux:shell脚本:基础使用(5)《正则表达式-sed工具》

sed是一种流编辑器&#xff0c;它是文本处理中非常中的工具&#xff0c;能够完美的配合正则表达式使用&#xff0c;功能不同凡响。 处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff08;pattern space&#xff09;&#xff0c;接着用s…

Linux journalctl命令详解(journalctl指令)(systemd服务默认日志管理工具)

文章目录 Linux Journalctl命令详解1. Journalctl简介2. Journalctl基础使用3. 过滤日志条目4. 时间戳和日志轮转5. 高级应用6. journalctl --help指令文档英文中文 注意事项journal日志不会将程序输出的空行显示&#xff0c;日志会被压缩得满满当当。journal日志不会自动持久化…

由JDK bug引发的线上OOM

由JDK bug引发的线上OOM 最近生产环境的一个应用忽然发生了OOM&#xff0c;还好是业务低峰期&#xff0c;没有导致什么严重问题&#xff0c;下面记录下本次排查的过程&#xff1b; 故障临时处理 在某天下午&#xff0c;正在愉快的写代码时&#xff0c;忽然看到业务反馈支付服…

Ubuntu中删除LibreOffice方法

目录 删除LibreOffice套件 删除所有与LibreOffice相关的软件包 删除与LibreOffice相关的配置文件 删除LibreOffice套件 1、打开终端。您可以使用快捷键Ctrl Alt T来打开终端。 2、输入以下命令以卸载LibreOffice套件&#xff1a; sudo apt-get remove libreoffice* 删…

美容行业如何快速搭建自己的预约小程序?

现在&#xff0c;搭建一个专属于美容行业的预约小程序不再是只有程序员才能做到的事情了。有了一些小程序制作平台的存在&#xff0c;任何人都可以轻松地制作出自己的小程序。下面&#xff0c;我将揭秘一个快速搭建专属美容行业预约小程序的秘诀。 首先&#xff0c;登录小程序制…

LVS+Keepalived群集实验

目录 Keepalived 是什么 Keepalived 功能 Keepalived 模块 工作原理 脑裂现象及解决方案 脑裂 形成脑裂的原因 解决脑裂的几种方法&#xff1a; 为了减少或避免HA集群中出现脑裂现象&#xff0c;我们可以采取以下措施&#xff1a; Keepalived服务主要功能&#xff0…

数学建模(五)非线性规划

课程推荐&#xff1a; 13 非线性规划算法在数学建模中的应用与编程实现_哔哩哔哩_bilibili 一、非线性规划模型 如果目标函数或约束条件中包含非线性函数&#xff0c;就称这种规划问题为非线性规划问题。一般说来&#xff0c;解非线性规划要比解线性规划问题困难得多。而且&am…

C语言日常刷题 1

文章目录 题目答案与解析1234.5.6. 题目 1、执行下面程序&#xff0c;正确的输出是&#xff08; &#xff09; int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf(“%d,%d\n”&#xff0c;x, y); return 0; } A: 5,7 B: 7,5 C: 3,8 D: 8…

【PHP】PHP入门指南:从基础到进阶

PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的服务器端脚本语言&#xff0c;尤其在Web开发领域有着重要的地位。本文旨在为初学者提供一份详尽的PHP入门指南&#xff0c;帮助您了解PHP的基础知识和语法&#xff0c;掌握基本的编程技巧&#xff0c;并熟悉…

2023年国赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…

iOS 17 及 Xcode 15.0 Beta7 问题记录

1、iOS 17 真机调试问题 iOS 17之后&#xff0c;真机调试Beta版本必须使用Beta版本的Xcode来调试&#xff0c;用以前复制DeviceSupport 方式无法调试&#xff0c;新的Beta版本Xcode中&#xff0c;已经不包含 iOS 17目录。如下图&#xff1a; 解决方案&#xff1a; 1&#x…

vim+ctags使用

vimctags使用_tiefanhe的博客-CSDN博客 Ubuntu下安装Ctags 只需使用apt-get install ctags即可 熟练的使用ctags仅需记住下面七条命令&#xff1a; 1&#xff0e; $ ctags–R * ($ 为Linux系统Shell提示符) 2. $ vi –t tag(请把tag替换为您欲查找的变量或函数名) …

多数元素00

题目链接 多数元素 题目描述 注意点 给定的数组总是存在多数元素多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素 解答思路 初始想到使用map存每个元素和元素出现的次数&#xff0c;但是时间和空间都不理想因为本题给定的数组总是存在多数元素&#xff0c;使用投票算…

GitLab-CI 指南

GitLab CI 指南 前置工作 部署GitLab 部署GitLab-Runner 注册Runner到GitLab docker exec -it gitlab-runner bash # 进入容器 gitlab-runner register #调用register命令开始注册 # 在Gitlab Setting中找到Runners,如下图所示Enter the GitLab instance URL (for example, …

高品质音乐下载命令行工具Musicn

又到了小苏同学的生日&#x1f382;&#xff0c;宝贝&#xff0c;生日快乐&#xff01;祝永远健康、快乐、心想事成&#xff01; 什么是 Musicn &#xff1f; Musicn 是一个可播放及下载高品质&#x1f3b5;音乐&#x1f3b5;的命令行工具。支持咪咕、酷我、酷狗和网易云的服务…

C#设计模式之--六大原则 开闭原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守&#xff0c;而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内&#xff0c;努为做到一个良好的设计。本文主要介绍一下.NET(C#)…

《中国区块链发展报告(2023)》发布 和数集团推动区块链发展

北京区块链技术应用协会与社会科学文献出版社日前在京共同发布《区块链蓝皮书&#xff1a;中国区块链发展报告&#xff08;2023&#xff09;》。蓝皮书归纳梳理了2022年区块链产业发展现状及趋势&#xff0c;并结合行业热点Web3.0、AIGC&#xff0c;探讨我国区块链发展的热点话…

变动的Python爬虫实现

在电商时代&#xff0c;了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例&#xff0c;您将能够轻松监控商品价格&#xff0c;并及时做出决策。 一、了解需求和目标 在…

GB28181/GB35114视频汇聚平台LiveGBS中如果修改默认admin用户的用户名以及其他用户的用户名

GB28181/GB35114流媒体服务搭建 搭建入口&#xff0c;解压启动即用&#xff1a;https://www.liveqing.com/docs/download/LiveGBS.html 一、功能说明 提供用户管理及 Web 可视化页面管理&#xff0c;开源的前端页面源码; 提供设备状态管理&#xff0c;可实时查看设备是否掉线…