博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode算法: 删除排序数组中的重复项
阅读量:3715 次
发布时间:2019-05-22

本文共 1106 字,大约阅读时间需要 3 分钟。

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成

重点就是不能利用新的数组空间赋值,只能利用原来的数组。我们这里做下拓展,一个是只返回数组新长度,另一个是尝试获取新数组

思路一

for循环嵌套遍历,一个正向循环(从0开始),一个反向循环(从length-1开始),如果正循环的值存在,则从原数组删除

  • 获取数组
import cn.hutool.core.util.ArrayUtil;// 有序数组,已然排序过的int[] nums = new int[]{
1, 1, 2, 3, 4, 4, 5};public static int[] getNums(int[] nums) {
if (nums == null || nums.length == 0) {
return new int[0]; } for (int i = 0; i < nums.length; i++) {
for (int j = nums.length - 1; j > i; j--) {
if (nums[j] == nums[i]) {
nums = ArrayUtil.remove(nums, j); } } } return nums; } //这种情况下,返回了新数组 {1,2,3,4,5}

思路二

双指针,只有当右侧指针不等于左侧时,左侧指针移动,并赋值为右侧指针指向数值。这样左侧指针的长度就是最终答案

public static int removeDuplicateNums(int[] nums) {
if (nums == null || nums.length == 0) {
return 0; } int left = 0; for (int right = 1; right < nums.length; right++) {
if (nums[left] != nums[right]) {
nums[++left] = nums[right]; } } return ++left;}

转载地址:http://ddejn.baihongyu.com/

你可能感兴趣的文章
Java注解之 @Target、@Retention、@Documented简介
查看>>
@Order 注解
查看>>
@interface的用法
查看>>
LoggerFactory.getLogger用法
查看>>
ThreadLocal使用方法
查看>>
线程run方法执行顺序
查看>>
多线程执行顺序以及run方法的调用
查看>>
ThreadPoolTaskExecutor使用详解
查看>>
使用idea将普通项目转换为maven项目
查看>>
Shiro安全框架入门笔记(一)
查看>>
IntelliJ idea 自动导入忽略大小写设置
查看>>
使用JdbcRealm时,UnauthorizedException: Subject does not have permission
查看>>
SpringBoot2.0集成Shiro
查看>>
如何给老婆解释什么是RPC
查看>>
Dubbo总结(一)
查看>>
抽空看看
查看>>
IDEA自带Maven添加阿里镜像
查看>>
Idea在plugin的marketplace中一直查不到东西的解决途径
查看>>
Intellij IDEA 安装插件 报 ‘plugin xxxx is incompatible‘ 解决方案
查看>>
Failed to bind NettyServer on ×××,cause: io/netty/bootstrap/ServerBootstrap
查看>>