LeetCode力扣每日一题(Java):27、移除元素

一、题目

二、解题思路

1、我的思路

因为题目中说“元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。”也就是说:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

所以我的想法是,我们要尽量避免在数组中删除元素这种事件复杂度高的操作,所以当元素值和val相同时,我们可以不必将它删除,而是将它和数组的最后一个元素交换位置,同时让数组长度减1

和上一题(上一篇博客)的想法一样:我们定义一个计数器count,来记录交换元素的次数,nums.length - count 即为新数组的长度

值得注意的是:在交换之后,我们不知道换到前面的数是否也等于val,所以还需执行i--

于是我写了如下代码,第一次提交就通过了,而且代码时间效率击败了100%的Java用户,给我整笑了

int count = 0;for (int i = 0; i < nums.length - count; i++) {if(nums[i] == val){int temp = nums[i];nums[i] = nums[nums.length - count -1];nums[nums.length - count -1] = temp;count++;i--;}}return nums.length - count;

2、官方题解

方法一:双指针

这题官方题解的思路和上一题(上一篇博客)基本一样

class Solution {public int removeElement(int[] nums, int val) {int n = nums.length;int left = 0;for (int right = 0; right < n; right++) {if (nums[right] != val) {nums[left] = nums[right];left++;}}return left;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/remove-element/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

方法二:双指针优化

class Solution {public int removeElement(int[] nums, int val) {int left = 0;int right = nums.length;while (left < right) {if (nums[left] == val) {nums[left] = nums[right - 1];right--;} else {left++;}}return left;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/remove-element/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

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

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

相关文章

JavaEE 09 锁策略

1.锁策略 1.1 乐观锁与悲观锁 其实前三个锁是同一种锁,只是站在不同的角度上去进行描述,此处的乐观与悲观其实是指在预测的角度上看会发生锁竞争的概率大小,概率大的则是悲观锁,概率小的则是乐观锁 乐观锁在加锁的时候就会做较少的事情,加锁的速度较快,但是消耗的cpu资源等也会…

机器人纯阻抗控制接触刚性环境(阻尼影响因素)

问题描述 在机器人学中&#xff0c;阻抗控制是一种常用的控制策略&#xff0c;用于管理机器人在与环境交互时的运动和力。阻抗控制背后的关键概念是将环境视为导纳&#xff0c;而将机器人视为阻抗。 纯阻抗控制接触刚性环境时&#xff0c;机器人的行为方式主要受其阻抗参数的…

Linux虚拟机ipaddr/ifconfig不显示IP的解决方法(亲测有效)

目录 问题描述激活网卡插网线的情况连Wifi的情况静态ip 问题描述 有时候经常会出现之前明明好的&#xff0c;但是换了个网络就查不到ip了&#xff0c;由于不知道原因&#xff0c;有的人会选择重装虚拟机&#xff0c;还有的人开始崩溃&#xff0c;甚至于自疑&#xff0c;到底谁…

Kubernetes(K8S)

Kubernetes是一种容器编排平台&#xff0c;可以自动化部署、扩展和管理容器化应用程序。用于管理云平台中多个主机上的容器化的应用&#xff0c;从而使得应用程序可以更加灵活和可靠。 Kubernetes是一个开源项目&#xff0c;由Google维护。它是目前最受欢迎的容器编排平台之一&…

[Linux] nginx防盗链与优化

一、Nginx的页面优化 1.1 Nginx的网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改&#xff0c;就能实现Nginx页面的压缩&#xff0c;达到节约带宽&#xff0c;提升用户访问速度 vim /usr/local/nginx/conf/nginx.conf http { .…

windows下dmPython操作达梦数据库环境配置

文章目录 windows下dmPython操作达梦数据库代码示例安装达梦库编译文件拷贝文件调试代码参考文献 windows下dmPython操作达梦数据库代码示例 安装达梦库 下载DM8版本 https://www.dameng.com/DM8.html 配置环境变量 编译文件 进入dmPython的官方安装源&#xff0c;如我的目…

vue3中的v-model语法糖

Vue2的v-model默认解析成 :value 与 input Vue3的 V-model 默认解析成 :modelValue 与 update:modelValue vue3中只需要 v-model 指令可以支持对个数据在父子组件同步&#xff0c;不再支持 .sync 语法 vue3 中 v-model 语法糖 :modelValue"count" 和 update:modelVal…

初识指针数组、数组指针

声明&#xff1a;学习过程中的笔记&#xff0c;不足之处请指教 两者的含义 指针数组&#xff1a;int* arr[10]; 用来存放指针的数组。 解释&#xff1a; arr 先与“[ ]”结合,构成一个数组的定义,数组名为 arr。 如果搞不清楚运算符的优先级&#xff0c;那么就加上小括号…

Botton进一步了解(点击事件)

点击事件和长按事件 监听器&#xff1a;专门监听控件的动作行为。只有控件发生了指定的动作&#xff0c;监听器才会触发开关区执行对应的代码逻辑。按钮控件有两种常用的监听器&#xff1a; 点击监听器&#xff1a;通过setOnClickListener方法设置。按钮被按住少于500ms时会触…

7/100 盛最多水的容器 8/100整数转罗马数字 9/100罗马数字转整数

题目&#xff1a;盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&a…

CDN 内容分发网络

CDN常见问题 什么是 CDN &#xff1f; CDN 全称是 Content Delivery Network/Content Distribution Network&#xff0c;翻译过的意思是 内容分发网络 。 我们可以将内容分发网络拆开来看&#xff1a; 内容&#xff1a;指的是静态资源比如图片、视频、文档、JS、CSS、HTML。…

智能优化算法应用:基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.粒子群算法4.实验参数设定5.算法结果6.参考文…