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

Leetcode_27移除元素_26删除有序数组中的重复项_80删除有序数组中的重复项 II_169多数元素

文章目录

  • 一、移除元素
    • 1.1 题目描述
    • 1.2 思路
  • 二、删除有序数组中的重复项
  • 三、删除有序数组中的重复项 II
  • 四、多数元素

一、移除元素

1.1 题目描述

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 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],也会被视作正确答案。

示例 2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,3,0,4]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

1.2 思路

/*** leetcode_27 移除元素* 时间复杂度O(n),空间复杂度O(1)* @param nums* @return*/
public static int removeElement_27(int[] nums, int val) {int result = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] != val) {nums[result] = nums[i];result++;}}return result;
}

二、删除有序数组中的重复项

/*** set去重* 时间复杂度O(n),空间复杂度O(n)* @param nums* @return*/
public static int removeDuplicates_26_set(int[] nums) {Set<Integer> set = new HashSet<>();for (int i = 0; i < nums.length; i++) {if (!set.contains(Integer.valueOf(nums[i]))) {set.add(nums[i]);}}return set.size();
}
/*** 双指针* 时间复杂度O(n),空间复杂度O(1)* @param nums* @return*/
public static int removeDuplicates_26_array(int[] nums) {if (nums.length == 0)return 0;int index = 0;for (int i = 1; i < nums.length; i++) {if (nums[i] != nums[index]) {index++;nums[index] = nums[i];}}System.out.println(Arrays.toString(nums));return index + 1;
}

三、删除有序数组中的重复项 II

/*** 双指针* 时间复杂度O(n),空间复杂度O(1)* @param nums* @return*/
public static int removeDuplicates_80_array(int[] nums) {if (nums.length <= 2)return nums.length;int index = 1;for (int i = 2; i < nums.length; i++) {if (nums[i] != nums[index - 1]) {index++;nums[index] = nums[i];}}System.out.println(Arrays.toString(nums));return index + 1;
}

四、多数元素

/*** leetcode_169 多数元素* 时间复杂度O(n) 空间复杂度O(1)* @param nums* @return*/
public static int majorityElement_169(int[] nums) {int result = nums[0];int count = 0;for (int i = 0; i < nums.length; i++) {if (count == 0) {count++;result = nums[i];}else {if (result == nums[i]) {count++;}else {count--;}}}return result;
}

相关文章:

  • c++常考基础知识(2)
  • 1-Flume中agent的source
  • 记录一次流相关故障
  • Vue开发日志:自定义组件:通用开发流程
  • 鸿蒙一次开发,多端部署(十三)功能开发的一多能力介绍
  • 说说webpack中常见的Loader?解决了什么问题?
  • 锂电池寿命预测 | Matlab基于ALO-SVR蚁狮优化支持向量回归的锂离子电池剩余寿命预测
  • 腾讯春招后端一面(八股篇)
  • 路由器里如何设置端口映射?
  • Java练手游戏--俄罗斯方块
  • GEE高阶案例——Landsat/Sentinel/MODIS影像进行缨帽变换一行代码实现
  • 【小程序开发】位置 API 集合(二)
  • M4A与MP3:两种音频格式的比较
  • IP地址、子网掩码、网关
  • Unbuntu20.04 git push和pull相关问题
  • JavaScript-如何实现克隆(clone)函数
  • $translatePartialLoader加载失败及解决方式
  • ES6系列(二)变量的解构赋值
  • Leetcode 27 Remove Element
  • PHP的类修饰符与访问修饰符
  • Redux系列x:源码分析
  • Terraform入门 - 3. 变更基础设施
  • use Google search engine
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于HAProxy的高性能缓存服务器nuster
  • 微信小程序设置上一页数据
  • 译有关态射的一切
  • 原生Ajax
  • ​【已解决】npm install​卡主不动的情况
  • #大学#套接字
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (C++17) std算法之执行策略 execution
  • (安卓)跳转应用市场APP详情页的方式
  • (第一天)包装对象、作用域、创建对象
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (七)c52学习之旅-中断
  • (七)理解angular中的module和injector,即依赖注入
  • (生成器)yield与(迭代器)generator
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .Net Memory Profiler的使用举例
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Controller和@RestController的区别?
  • [AIGC 大数据基础]hive浅谈
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [bzoj1912]异象石(set)
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [go] 策略模式
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [one_demo_1]php中的文件锁
  • [POI2007] ZAP-Queries (莫比乌斯反演)