list 唯一化

本文探讨了如何实现列表唯一化,包括通过排序和双指针的方法。无序列表唯一化的时间复杂度为ο(nlogn),而有序列表的时间复杂度为ο(n)。文中引用了邓俊辉的《数据结构(C++语言版)》作为参考。

1.题目

list唯一化

2.数据结构与算法

algorithm:先排序,再使用双指针进行唯一化

3.源代码

#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <algorithm>
using namespace std;

void unique(list<int> &l){
   
   
	list<int>::iterator q = l.begin();
	list<int>::iterator p;

	for (p = q++; p!=l.end();){
   
   
		if
### Java中初始List集合的方式 #### 使用数组转换成列表 一种方法是通过创建一个数组并将其传递给`Arrays.asList()`方法来快速构建固定大小的列表。此操作返回由指定数组支持的固定大小列表实例。 ```java import java.util.Arrays; import java.util.List; public class Example { public static void main(String[] args) { String[] animals = {"dog", "cat"}; List<String> animalList = Arrays.asList(animals); System.out.println(animalList); // 输出: [dog, cat] } } ``` 这种方法适用于已知元素数量的情况,但是需要注意的是,修改底层数组会影响到列表的内容,反之亦然[^1]。 #### 利用匿名内部类语法糖 对于较新的Java版本(特别是自Java 9起),可以直接利用钻石运算符结合匿名内部类的方式来简代码: ```java import java.util.ArrayList; import java.util.List; public class Example { public static void main(String[] args) { List<String> list = new ArrayList<>() {{ add("apple"); add("banana"); }}; System.out.println(list); // 输出: [apple, banana] } } ``` 不过这种方式实际上是在运行时动态地向新创建的对象里添加成员,因此效率上可能不如其他几种方案高效[^4]。 #### 借助于`Collections.singletonList()` 当只需要表示只含有单一元素的不可变列表时,可以采用`Collections.singletonList(T o)`函数。这会生成一个仅含参数所指明的那个唯一项的新列表对象。 ```java import java.util.Collections; import java.util.List; public class Example { public static void main(String[] args) { List<String> singleItemList = Collections.singletonList("onlyOneElement"); System.out.println(singleItemList); // 输出: [onlyOneElement] } } ``` 该实现特别适合那些确实只需表达单个实体的情形下使用;然而由于其不可变特性,在实际应用中的灵活性受到一定限制[^2]。 #### 结合`nCopies`与`ArrayList`构造器 为了获得既定重复次数相同值组成的可扩展列表,则可以通过先调用`Collections.nCopies(int n,T o)`获取相应模式序列后再传入到`ArrayList`构造器之中完成最终赋值过程。 ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Example { public static void main(String[] args) { List<String> repeatableList = new ArrayList<>(Collections.nCopies(3,"sameValue")); repeatableList.add("differentValue"); System.out.println(repeatableList); // 输出: [sameValue, sameValue, sameValue, differentValue] } } ``` 上述做法巧妙融合了两者优势——既能保持初始状态下各位置上的数据一致性又允许后续追加更多不同类型的条目加入其中[^3]。 #### 应用Stream API (Java 8及以上) 最后值得一提的是自从引入流式处理机制之后还可以借助它来进行更加简洁优雅的操作形式如下所示: ```java import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Example { public static void main(String[] args) { List<Integer> numberList = Stream.of(1, 2, 3).collect(Collectors.toList()); System.out.println(numberList); // 输出: [1, 2, 3] } } ``` 这里运用到了`Stream.of()`配合收集器(`Collectors`)从而实现了从一系列离散数值直接映射至目标容器内的效果.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值