最优去重算法探索
来源:互联网 发布:虚拟关注软件 编辑:程序博客网 时间:2024/05/22 07:51
最优去重算法探索
标签(空格分隔): 数据结构与算法 Java-Base
去重需求
- 去重
- 要统计最热门查询,首先就是要统计每个Query出现的次数,然后根据统计结果,找出Top 10
算法设计
双层遍历实现
实现逻辑:遍历源数组,依次比较当前元素arr[n]
与arr[n + 1]
…arr[last]
,若相等标识重复元素,切记录唯一项到结果target。
时间复杂度:循环了(n+n-1+n-2+…+1)≈(n^2)/2,因为时间复杂度是不考虑系数的,所以是
样本数据:正整数数组,只有一项为重复元素,99%不重复
执行结果耗时:
Code:
private static void removeDuplicateByList(int[] arr) { List<Integer> target = new ArrayList<Integer>(); //处理结果数组 startWatch(); for (int i = 0; i < arr.length; i++) { if (arr[i] == -1) continue; for (int j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { //记录重复元素下标 arr[j] = -1; } } target.add(arr[i]); } stopWatch(); }
Hash实现
实现逻辑:Set
是一个不包含重复元素的collection,其本质是Map
,通过元素的hashCode确定在Map数组的位置下标,相同位置下标且值不等,且入链表;相同位置下标且值相等则排除;理论上,最优情况是样本数组全部数据hash下标不相同,无需进行equal()
比较,时间复杂度为O(1)
时间复杂度:最优情况
样本数据:正整数数组,只有一项为重复项,99%不重复
执行结果耗时:
Code:
private static void removeDuplicateBySet(int[] arr) { Set<Integer> target = new LinkedHashSet<Integer>(); startWatch(); for (int i = 0; i < arr.length; i++) { target.add(arr[i]); } stopWatch(); }
0 0
- 最优去重算法探索
- 数组去重算法
- 去重算法(转)
- Java去重算法
- 去重算法
- 网页去重-算法篇
- 简单的去重算法
- 网页去重-算法篇
- 网页去重-算法篇
- 网页去重-算法篇
- 数组排序去重算法
- 网页去重算法介绍
- DFA算法去重效果
- 数组去重 算法实现
- JS数组去重算法
- JSON数组去重算法
- 网页去重算法Simhash
- simhash去重算法实践
- ADB 命令
- nginxredis zookeeper dubbo solr各自功能
- eclipse的ctrl+alt+向下键不能复制一行,原因是和快捷键冲突了
- 软件安装的练习
- Linux用户及权限管理
- 最优去重算法探索
- runtime字体大小适配
- 关于面向对象的理解
- springboot实战:我们的第一款开源软件
- 10763
- 菜鸟参与2017华为软件比赛资料分享
- PHP——输出语句
- logback
- ES6开发环境快速搭建