Leetcode--80. 删除排序数组中的重复项Ⅱ

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

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

示例 1:

给定 nums = [1,1,1,2,2,3],

函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。

你不需要考虑数组中超出新长度后面的元素。
示例 2:

给定 nums = [0,0,1,1,1,1,2,3,3],

函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。

你不需要考虑数组中超出新长度后面的元素。
说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

思路:

设定一个标志x,每次当出现新元素时将它赋值给x,之后使x与后面的元素进行比较,如果数量超过2,则将sum进行自加

sum表示当前的元素应该向前移动多少位

提交的代码:

class Solution {
    public int removeDuplicates(int[] nums) {
       if(nums.length==0)
    {
        return 0;
    }
        int i,sum=0,t=1,x=nums[0],j=0;   //为什么不用nums[i],要使用x,因为在向前移动的过程中,nums[i]可能发生改变,造成比较时出现错误
        for(i=1;i<nums.length;i++)
        {
            nums[i-sum] = nums[i];
            if(nums[i]==x&&t==1)
            {
                t++;  //t表示当前与x相同的元素有多少
            }
            else if(nums[i]==x&&t>1)
            {
                sum++;  //与x相同的元素超过两个,进行对sum的自加,看要移动多少位,即去掉多少个重复的
            }
            else if(nums[i]!=x)
            {
                t=1;
                j = i;
                x = nums[j];
            }
        }
        return nums.length-sum;  //总长度减去重复的即为现在的长度
    }
}

完整的代码:


public class Solution80 {
public static int removeDuplicates(int[] nums) {
    if(nums.length==0)
    {
        return 0;
    }
        int i,sum=0,t=1,x=nums[0],j=0;
        for(i=1;i<nums.length;i++)
        {
            nums[i-sum] = nums[i];
            if(nums[i]==x&&t==1)
            {
                t++;
            }
            else if(nums[i]==x&&t>1)
            {
                sum++;
            }
            else if(nums[i]!=x)
            {
                t=1;
                j = i;
                x = nums[j];
            }
        }
        return nums.length-sum;
    }
public static void main(String[] args)
{
    //int nums[] = {1,1,1,2,2,3};
    //int nums[] = {0,0,1,1,1,1,2,3,3};
    int nums[] = {1,1,1,1,2,2,3};
    int n = removeDuplicates(nums);
    System.out.println(n);
    for(int i=0;i<n;i++)
    {
        System.out.println(nums[i]);
    }
}
}
 

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

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

相关文章

科学史上那些盛极一时的“著名理论”是如何被攻破的?

《雅典学院》名画中的亚里士多德和柏拉图来源 :《自然》百年科学经典制版编辑: Morgan在科学发展的过程中&#xff0c;曾经涌现出不少盛极一时而后被证明是错误的理论。这些理论有的也许在今天看来悖谬荒诞&#xff0c;但是从整个科学发展的过程来看&#xff0c;它们仍然有其作…

Cluster - LB - haproxy

sd 转载于:https://www.cnblogs.com/aftree/p/9219435.html

Leetcode--1004. 最大连续1的个数Ⅲ

给定一个由若干 0 和 1 组成的数组 A&#xff0c;我们最多可以将 K 个值从 0 变成 1 。 返回仅包含 1 的最长&#xff08;连续&#xff09;子数组的长度。 示例 1&#xff1a; 输入&#xff1a;A [1,1,1,0,0,0,1,1,1,1,0], K 2 输出&#xff1a;6 解释&#xff1a; [1,1,1…

java 按钮 颜色_改变按钮颜色的java事件,个人成果!

import java.awt.*;import java.awt.event.*;public class Eventest{Button btn1new Button("单击");Frame myframenew Frame("测试单击事件");public void init(){btn1.setSize(30,26);btn1.addActionListener(new ActionListener(){public void actionPe…

AI在智能建筑中的应用和发展

来源&#xff1a;中研网图片来源&#xff1a;网络智能建筑诞生于二十世纪末&#xff0c;第一幢智能建筑于1984年在美国哈特福德 &#xff08;Hartford&#xff09;市建成。我国于90年代才起步&#xff0c;但迅猛发展势头令世人瞩目。目前&#xff0c;新技术、新产品在智能建筑中…

SpringBoot核心

1.基本配置 1.1入口类和SrpingBootApplication SpringBoot通常有一个名为*Application的入口类&#xff0c;入口类里有一个main方法&#xff0c;这个main方法就是一个标准的java应用的入口方法 。在main方法中使用SpringApplication.run,启动springboot项目。 其中EnablieAutoC…

grpc简单使用 java_gRPC学习记录(四)-官方Demo - Java 技术驿站-Java 技术驿站

了解proto3后,接下来看官方Demo作为训练,这里建议看一遍之后自己动手搭建出来,一方面巩固之前的知识,一方面是对整个流程更加熟悉.官方Demo地址: https://github.com/grpc/grpc-java例子是一个简单的路由映射的应用&#xff0c;它允许客户端获取路由特性的信息&#xff0c;生成…

冯端:漫谈物理学的过去、现在与未来

来源&#xff1a; 算法与数学之美撰文&#xff1a; 冯端 (南京大学物理系)“物理学的过去、现在和未来”是一个非常大而且重要的题目&#xff0c;也是一个非常难讲的题目&#xff0c;特别是涉及物理学的未来&#xff0c;结果往往是贻笑大方。这里以历史的透视为主线&#xff0c…

Leetcode--713. 乘积小于k的子数组

给定一个正整数数组 nums。 找出该数组内乘积小于 k 的连续的子数组的个数。 示例 1: 输入: nums [10,5,2,6], k 100 输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于100的子数…

第四次博客

第四次博客 一、测试与正确性论证的比较 测试具有针对性&#xff0c;能从一些方面完美的展现出代码的正确性&#xff0c;但是它的验证度取决于样例的质量。 优点是方便&#xff0c;快捷&#xff0c;结果明显&#xff1b;缺点是可能不会覆盖到方方面面。 正确性论证能从所有的方…

院士论坛|李德仁:测绘遥感能为智能驾驶做什么? ——论测绘遥感与智能驾驶

来源&#xff1a; 中国测绘学会未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业…

java 每行打印五个数字_java代码练习======每隔5行打印数字

总结&#xff1a;当我们感觉数字排列横排&#xff0c;竖排不好看的时候&#xff0c;学会空几行在排列&#xff0c;哎呦&#xff0c;效果不错喔package com.aa;public class West2 {public static void main(String[] args) {int count 0;for (int i 0; i < 100; i) {// 每…

Leetcode--455. 分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺寸 sj 。…

Spring Boot-springbootHelloword(一)

什么是springboot sprng家族一个全新的框架 简化我们应用程序的创建和开发的过程&#xff0c;使用默认配置简化了我们以前传统的配置 springboot的特性 能够快速创建spring程序能够使用java main方法启动内嵌的 tomcat 或者jetty服务器运行spring boot程序提供约定的starter p…

java实践项目_Java项目开发实践

第章项目开发基础()项目开发实训目标()实训知识目标()实训能力目标()实训素质目标()项目开发技术()图形用户界面编程技术()输入输出编程技术()网络编程技术()数据结构编程技术()绘图编程技术()数据库编程技术()本书各项目采用技术()项目开发工具()开发工具包()数据库系统()()()…

Leetcode--134. 加油站

在一条环路上有 N 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 如果你可以绕环路行驶一周&#…

原创工作发表难之叶公好龙

来源&#xff1a;张志东科学网博客链接地址&#xff1a;http://blog.sciencenet.cn/blog-2344-1265601.html 最近&#xff0c;科学网上一个热点话题是原创工作发表难不难&#xff1f;以真傻为代表的认为原创工作发表难&#xff0c;以王立新为代表的认为原创工作发表不难。那么&…

RSA 前段加密 java 后台解密 已调试通过

本人整理网上的。好多网上的调不通。在这里把调试好的贴出来。 1. 异步获取公钥&#xff08;后台获取&#xff09;&#xff1b;你也可以将公钥串写在页面上&#xff1b; var publicKey null; $.ajax({ url: ctx"/userLogin.do?methodgetRSAPublicKey", &#xf…

java字符的输入流_Java:字节流和字符流(输入流和输出流)

InputStream是抽象基类&#xff0c;所以它不可以创建对象&#xff0c;但它可以用来“接口化编程”&#xff0c;因为大部分子类的函数基类都有定义&#xff0c;所以利用基类来调用函数。FileInputStream是用来读文件数据的流&#xff0c;所以它需要一个文件对象用来实例化&#…

Leetcode--881. 救生艇

第 i 个人的体重为 people[i]&#xff0c;每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人&#xff0c;但条件是这些人的重量之和最多为 limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 示例 1&#xff1a; 输入&#xff1a;people [1,2],…