首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

消除重复的枚举代码

消除重复的枚举代码可以通过使用哈希表或者集合来实现。哈希表可以将每个枚举值映射到一个唯一的键,集合则可以存储已经出现过的枚举值。

以下是一个使用Python实现的示例代码:

代码语言:python
代码运行次数:0
复制
from typing import List

def remove_duplicates(nums: List[int]) -> List[int]:
    seen = set()
    result = []
    for num in nums:
        if num not in seen:
            seen.add(num)
            result.append(num)
    return result

在这个示例代码中,我们使用了一个集合 seen 来存储已经出现过的枚举值,然后遍历枚举值列表 nums,如果当前枚举值不在集合 seen 中,则将其添加到集合中,并将其添加到结果列表 result 中。最后返回结果列表 result 即可。

这种方法的时间复杂度为 $O(n)$,其中 $n$ 是枚举值的数量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【译】利用Lombok消除重复代码

    从我开始写Java以来,已经写了几千行代码了,其中大概50%都是样板代码,在转型之前,我就这么一直毫无怨言的写着。...而最近两年,我不再Java了,转而开始写一些Python,Go和JavaScript的代码。这时我才感觉到Java中的重复的样板代码是多么令人沮丧。...Lombok是如何工作的? Lombok是在Java注解处理器和几个编译时注解的帮助下工作的,它将注入额外的Java字节码来帮助我们处理重复的代码。...中插入以下代码来保证你的代码可以使用Lombok。...你需要有一个中间态的代码来使文档正确表示。此外,有时候你可能会想看看Lombok生成的代码到底是什么样的。幸好Lombok提供了“delomboking”,用来将Lombok转换成Java源代码。

    1.1K30

    利用注解 + 反射消除重复代码,妙!

    作者:Leilei Chen 链接:https://llchen60.com/利用注解-反射消除重复代码/ 1.1 案例场景 假设银行提供了一些 API 接口,对参数的序列化有点特殊,不使用 JSON...MD5 操作作为签名 1.2 初步代码实现 public class BankService { //创建用户方法 public static String createUser(String...,稍有不慎就会出现Bug 处理流程中字符串拼接、加签和发请求的逻辑,在所有方法重复 实际方法的入参的参数类型和顺序,不一定和接口要求一致,容易出错 代码层面参数硬编码,无法清晰进行核对 1.3 使用接口和反射优化代码...这样做的好处是开发的时候会方便直观很多,然后将逻辑与细节隐藏起来,并且集中放到了一个方法当中,减少了重复,以及维护当中bug的出现。...1.3.4 在代码中的应用 @BankAPI(url = "/bank/createUser", desc = "创建用户接口") @Data public class CreateUserAPI extends

    55630

    利用注解 + 反射消除重复代码,妙!

    ,即字符串内容靠左 数字类型的参数不满长度部分以0左填充,即实际数字靠右 货币类型的表示需要把金额向下舍入2位到分,以分为单位,作为数字类型同样进行左填充 参数做MD5 操作作为签名 2 初步代码实现...ContentType.APPLICATION_JSON) .execute().returnContent().asString(); } } 这样做能够基本满足需求,但是存在一些问题: 处理逻辑互相之间有重复...,稍有不慎就会出现Bug 处理流程中字符串拼接、加签和发请求的逻辑,在所有方法重复 实际方法的入参的参数类型和顺序,不一定和接口要求一致,容易出错 代码层面参数硬编码,无法清晰进行核对 3 使用接口和反射优化代码...这样做的好处是开发的时候会方便直观很多,然后将逻辑与细节隐藏起来,并且集中放到了一个方法当中,减少了重复,以及维护当中bug的出现。...3.4 在代码中的应用 @BankAPI(url = "/bank/createUser", desc = "创建用户接口") @Data public class CreateUserAPI extends

    52520

    利用注解 + 反射消除重复代码(Java项目)

    货币类型的表示需要把金额向下舍入2位到分,以分为单位,作为数字类型同样进行左填充 参数做MD5 操作作为签名 1.2 初步代码实现 public class BankService {     //...ContentType.APPLICATION_JSON)                 .execute().returnContent().asString();     } } 这样做能够基本满足需求,但是存在一些问题: 处理逻辑互相之间有重复...,稍有不慎就会出现Bug 处理流程中字符串拼接、加签和发请求的逻辑,在所有方法重复 实际方法的入参的参数类型和顺序,不一定和接口要求一致,容易出错 代码层面参数硬编码,无法清晰进行核对 1.3 使用接口和反射优化代码...这样做的好处是开发的时候会方便直观很多,然后将逻辑与细节隐藏起来,并且集中放到了一个方法当中,减少了重复,以及维护当中bug的出现。...1.3.4 在代码中的应用 @BankAPI(url = "/bank/createUser", desc = "创建用户接口") @Data public class CreateUserAPI extends

    87900

    巧用枚举消除条件判断

    个人IP:shigen在上一篇的文章结合HashMap与Java 8的Function和Optional消除ifelse判断中有讲到如何结合HashMap与Java 8的Function和Optional...消除ifelse判断,相关的文章可以点击链接查看,这里做一些小小的改造,将不同的处理方式抽成一个方法,最终的代码是这样的:是不是看起来更加规范和清晰了。...今天讲的就是通过枚举实现if-else的消除,先上代码:定义的枚举类 public enum QuestionHandlerEnum { A() { @Override...这是看的阿里大佬的写法,将方法内聚在抽象方法和枚举中,大大简化代码,提升功能的统一和内聚。...这种写法在实际的开发中,相信大家也很少用到,但是也有对应的场景的,shigen当时看到这种写法也是看大佬们给出的实现加减乘除的案例中学到的。最后附上代码截图:与shigen一起,每天不一样!

    6310

    如何用枚举消除ifelse?-枚举高阶用法

    因此不能再继承其他的类。 (2)枚举的构造函数是private修饰的,所以不能通过构造函数获取对象。 (3)枚举的属性是static修饰的,可以通过枚举直接调用属性。...我们能用枚举做什么 消除烦人的if/else 当你代码中的if/else过多的时候,会提高你代码的复杂度,如果你们公司对sonar异味有要求,肯定被if/else困扰过。...我们可以用枚举消除if/else,使用场景如下: if ("PANDA".equals(type)) { System.out.println("吃竹子"); } else if("CAT".equals...至此我们消除了if/else。 用枚举实现单列 《 Effective Java》作者大力推荐的方式。...Java 规范中规定,每一个枚举类型及其定义的枚举变量在 JVM 中都是唯一的,并且在枚举类型的序列化和反序列化上,Java 做了特殊的规定。

    89520

    【C++11】消除重复, 提升代码质量---type_tratis

    在《代码大全》书中对代码的圈复杂度规则进行了说明,具体如下: 从函数第一行开始,一直往下看程序; 遇到以下关键字或者同类的字那么圈复杂度加1;关键字如下:if,while,for,end,or,repeat...为了解决因为代码圈复杂度产生的代码质量问题,C++11提供了type_tratis类型萃取功能,在一定程度上可以消除冗长的代码分支语句,降低圈复杂度进而提升代码的可维护性。...1 基本的type_traits C++ 11之前通过const或者enum枚举定义一个编译期常量的类型,在C++11中,则不需要这么定义,只需要从std::integral_constant进行派生即可...使用方法也很简单,派生integral_constant类后,则不用再新增定义类型和枚举变量。...使用std::enable_if可以实现一个强大的重载机制,充分利用可以减少或者消除圈的复杂度。如:根据不同的数据基本类型转换为string进行输出。

    1.7K10

    【C++11】消除重复, 提升代码质量---可变参数模板

    省略号的作用如下: 声明一个参数包,这个参数包中可以包含0到任意个模板参数; 在模板定义的右边,可以将参数包展开成一个个独立的参数; 1 可变参数模板函数 可变参数模板函数代码如下所示: template...: 0 2 3 代码中,分别调用了Fun的三个重载函数,第一个参数包中参数个数为0,第二个为2,第三个为3,所以在输出的时候结果分别为0,2,3。...1.2 逗号表达式和初始化列表方式 逗号表达式的优点是不需要提供一个终止函数,就像在本文一开始提供的代码那样。下面我们用改方式实现递归打印参数的功能。...主要包括类的声明、类的特化,如下面的参数模板类就定义了三个类。代码如下: //前向声明 template 消除重复代码 可变参数模板的特性之一就是参数包中的参数数量和类型可以是任意的,因此可以通过泛化的方式处理问题。

    1.5K30

    Metalama简介2.利用Aspect在编译时进行消除重复代码

    但是例子过于简单,也只是在代码前后加了两个Console.WriteLine,并没有太大的实际参考意义。下面我就以几个实际例子,来体现Metalama在复用代码方面的好处。...实现一个重试N次的功能 在平时的代码中,有这种场景,例如,我调用一个方法或API,他有一定的概率失败,例如发生了网络异常,所以我们就要设定一个重试机制(以重试3次然后放弃为例)。...假设我们有一个方法,代码详见示例中的RetryDemo。...OverrideMethodAspect此基类是用于为方法添加编译时切面代码的Attribute....PropertyChanged; } 但是这里,要将自动属性进行展开,并产生大量字段,对于这里的重复代码,我们可以用Metalama进行处理,我们最终要代码实现为如下: public class MyModel

    40630

    Metalama简介2.利用Aspect在编译时进行消除重复代码

    但是例子过于简单,也只是在代码前后加了两个Console.WriteLine,并没有太大的实际参考意义。下面我就以几个实际例子,来体现Metalama在复用代码方面的好处。...实现一个重试N次的功能 在平时的代码中,有这种场景,例如,我调用一个方法或API,他有一定的概率失败,例如发生了网络异常,所以我们就要设定一个重试机制(以重试3次然后放弃为例)。...假设我们有一个方法,代码详见示例中的RetryDemo。...OverrideMethodAspect此基类是用于为方法添加编译时切面代码的Attribute....PropertyChanged; } 但是这里,要将自动属性进行展开,并产生大量字段,对于这里的重复代码,我们可以用Metalama进行处理,我们最终要代码实现为如下: public class MyModel

    615101

    【AI系统】死代码消除

    死代码消除(Dead Code Elimination)是一种编译器优化技术,旨在删除程序中不会被执行的代码,从而提高程序的执行效率和资源利用率。...死代码是指在程序的当前执行路径下不会被访问或执行的代码片段。传统编译器的死代码消除死代码消除的目的是删除程序中无用和不可达操作对应的代码。...在传统编译器中,死代码消除通常是通过分析控制流图(CFG),从而找到并删除无用和不可达操作对应的代码。不可达操作不可达操作通常有两类:第一种是不可达基本块中的操作。...由于出口节点是一定含有有用操作,所以上述操作在向后查找的过程中,一定会停止。AI 编译器中的死代码消除AI 编译器通常是通过分析计算图,找到无用的计算节点或不可达的计算节点,然后消除这些节点。...除此之外,训练的时候会产生大量的子图,而这些子图通常对于推理来说是无用的,所以在推理的时候可以删除这些无用的子图。死代码消除案例以 Golang 为例,简单了解一下AI编译器是死代码消除的一种实现。

    10510

    Java--消除重复数字后的最大值

    描述: 一个长整型数字,消除重复的数字后,得到最大的一个数字。...如12341 ,消除重复的1,可得到1234或2341,取最大值2341. 42234,消除4 得到4223 或者 2234 ,再消除2,得到423或234,取最大值423 以此类推。...--------手动分隔符---------------------------------------------- 解决思路: 从头到尾遍历,比如432324, 第一次4, 第二次3,前面没有和3重复的...,所以结果尾43 第三次2,前面没有和2重复的,所以结果尾432 第四次3,前面有重复的,比较前面那个3的下一个数字为2,因为3>2,所以删除当前的3....代码如下: import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main

    2800

    Java枚举:消除魔法数字、实现映射关系实战

    Java 枚举类型可消除魔法数字,实现数据与逻辑映射。本文探讨其用法、示例代码及实际价值。1....// 当你创建Color枚举类并定义其成员(RED、GREEN和BLUE)时,每个成员都有一个构造函数调用 // 这里的RED("红")、GREEN("绿")和BLUE("蓝")就是在实例化枚举成员时传入的参数...消除魔法数字程序中用数字 0 表红色、1 表绿色、2 表蓝色,易使其他开发者困惑且不便扩展修改。解决方案:用枚举将数字转换为有意义常量名。...枚举类有三个成员,各有整数代码。fromCode()是静态方法,根据整数代码找对应枚举值。主函数中,ColorCode.fromCode(0)找到对应颜色枚举(RED)并输出名称。3....在涉及状态标识等有具体含义场景下,应优先用枚举。枚举能将魔法数字转化为有明确定义的常量,增强代码可读性和维护性。可实现枚举值与数据库字段等的清晰映射。

    14820

    CA1069:枚举不得具有重复值

    值 规则 ID CA1069 类别 设计 修复是中断修复还是非中断修复 重大 原因 枚举具有多个成员,这些成员显式分配有相同常数值。...规则说明 每个枚举成员都应具有唯一的常数值,或者为其显式分配枚举中的前一个成员以指示共享值的明确意图。...bug: 意外键入错误:用户意外地为多个成员键入了相同的常数值。...合并多个分支中的解决方案:在不同分支中添加了具有不同名称但有相同值的新成员。 如何解决冲突 若要解决冲突,请分配新的唯一常数值,或分配枚举中的前一个成员以指示共享同一值的明确意图。...例如,以下代码片段显示了与此规则的冲突,以及解决冲突的几种方法: enum E { Field1 = 1, AnotherNameForField1 = Field1, // This

    63020

    通过Groovy来消除代码噪声

    通过Groovy来消除代码噪声 Java是在JVM上运行的最广泛使用的编程语言。不过,还有很多其他基于JVM的语言,比如Groovy,Scala,JRuby,Jython,Kotlin等等。...Groovy Groovy是一种基于Java的语法的基于JVM的编程语言。Groovy支持动态输入,闭包,元编程,运算符重载等等语法。...除此之外,Groovy还提供了许多类似脚本语言的功能,比如,多行字符串,字符串插值,优雅的循环结构和简单的属性访问。另外,结尾分号是可选的。而这些都有足够的理帮助开发人员为了提高开发效率。...如下代码片段: package com.groovydemo.groovy.entity class Stu { Integer id; String name; Integer...以Maven构建工具为例,使用插件:gmavenplus-plugin编译Groovy代码。如下代码所示。 pom.xml: <?xml version="1.0" encoding="UTF-8"?

    70920

    策略枚举:消除在项目里大批量使用if-else的正确姿势

    那么,如何消除在项目里大量使用if-else呢? 网络上有很多解决思路,有工厂模式、策略模式、甚至是规则引擎(这个太重了吧)...... 这些,都有一个共同的缺点,使用起来还是过于繁重了。...真正在项目中能替换大量if-else语句,且具备较好的可读性与扩展性的,同时显得比较轻量化的,我比较推荐使用策略枚举来消除if-else。...可见,把流程判断抽取到策略枚举当中,还可以把一堆判断解耦出来,避免在业务代码逻辑里呈现一大片密密麻麻冗余的if-else。...可以参考一下以下思路,设置一个内部策略枚举,将有相同功能的外部引用指向同一个内部枚举属性,这样即可实现调用重复功能了—— public enum DayEnum { //指向内部枚举的同一个属性即可执行相同重复功能...我很喜欢在大批量if-else里使用策略枚举来消除替换,总而言之,使用策略枚举可以很灵活处理各种复杂判断,且可读性与扩展性都比较好,它更像是函数式编程,即传进一个参数,就可以得到对应模式下返回的数值。

    83210
    领券