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

消除重复的枚举代码

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

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

代码语言:python
复制
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源代码

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

52430

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

,即字符串内容靠左 数字类型参数不满长度部分以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

50020

利用注解 + 反射消除重复代码(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

84100

如何用枚举消除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 做了特殊规定。

79920

【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.6K10

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

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

1.3K30

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

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

35830

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

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

536101

CA1069:枚举不得具有重复

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

59520

通过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"?

68020

使用策略模式消除if else代码

现在可以了解到,我们主要业务逻辑是在处理器中实现,因此有多少个代报考类目,就对应有多少个处理器。...具体思路是: 扫描指定包中标有@ExamRuleHandler类; 将注解中类型值作为key,对应类作为value,保存在Map中; 重写 实现ApplicationContextAware接口...ExamRuleHandlerContext类中setApplicationContext方法,当spring容器初始化时候,会自动将ApplicationContext注入进来 我们将核心功能封装在...总结 利用策略模式可以简化繁杂if else代码,方便维护,而利用自定义注解和自注册方式,可以方便应对需求变更。...本文只是提供一个大致思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为代报考类型,相信你能想到更多更好方法。

56550

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

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

75710

消除代码 if-elseswitch-case正确姿势

在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂逻辑,相信很多人都喜欢用 if-else/switch-case 去实现。...不仅违背开闭原则,而且随着 switch-case 分支增多,该段代码只会越来越冗长。其实这种代码已经有成熟模式去消除诸多 if-else/switch-case 分支。...本文就教大家在 Spring 中如何用注解+策略模式+简单工厂方式消除 if-else/switch-case 。...一般后台代码很有可能如下: //各个 tab 名称枚举: public enum UserRelatedType { /** * 说说 */ SHUOSHUO("...其实这是一种通用解决方案,当你 if-else/switch-case 分支超过 3 个、且分支代码相似且冗长情况下就应该考虑这种模式。

82620

【致38节】消除代码“性别偏见”

因为那时共识是软件编程只是体力劳动(沉思状,现在好像也差不多),男人不屑于做,就交给了女人,结果女人做不仅认真细致还有各种创新;再随着时代演进男人发现软件编程很有搞头,就又把编程事从女人手里抢了回来...编程历史差不多就是这么个事,呵呵,男人! Linux里男人 大家在学Linux时候,第一个或者第一批学会命令一定有它: man 这个“男人”用来显示某些命令或者配置文件联机帮助。...还有个“info”,与“man”功能相似,虽然info表达感觉更直接,但man使用相对更加普遍和深入人心一些。 有好事者(就是我)就不爽了: 凭啥定义成man而不是woman呢?...继承关系里父类 很多编程语言里都有继承,而提到上一级都会说父类,那么凭啥就不能叫母类? 让我惊奇是,怎么Google都无法搜到与此相关讨论。...顺祝自己领导和其他各位 Happy Women's Day!

53320

一句代码消除img标签之间间隙

今天写css时发现图片与图片之间有一行空白间隙,全百科网就在网上找到了几个不错解决方法,发现很多方法都太实用,而且代码复杂,通过不懈努力,终于克服了这个难题,只需要一句样式代码即可搞定。...问题描述 代码示例 img{ vertical-align:left; display:block;.../images/quanbaike.com_02.jpg"> 以上代码,在前端浏览时quanbaike.com_01.jpg与quanbaike.com_02.jpg上下之间是有一行白条间隙。...消除间隙 如何消除这个间隙呢?...全百科网通过网上诸多代码测试实践之后,终于找到了一段神奇代码,不仅简短,而且还可以非常有效消除img标签之间间隙, 示例代码 给img标签添加样式如下: img{ vertical-align:

1.7K30
领券