去重算法,简单粗暴&优化版
Remove Repeat
一、去重原理
1、进行排序
2、判断是否满足 '两个字符串相同' 的条件,相同则累加重复次数,并使用continue继续下一次循环
3、当条件不满足时,将该字符串和累计数加入数组中,并重置累计值。
二、源码
1、很久之前写的,我就不多说了。
import java.util.ArrayList;
import java.util.List; //一个去重的算法,写的有点复杂,没有优化过
public class RemoveRepeat {
public static void main(String[] args) {
String[] array = {"a","a","b","c","c","d","e","e","e","f","f","f", "dagds", "dagds"};
List<String> strs = removeRepeat(array);
for (String string : strs) {
System.out.print(string+" ");
}
}
public static List<String> removeRepeat(String[] array) {
List<String> strs = new ArrayList<String>();
for(int i = 0; i<array.length; i++) {
int count = 1;
for(int j = i+1; j < array.length; j++) {
if(array[i] == array[j]) {
count++;
}
if(array[i] != array[j] || j == array.length-1) {
strs.add(array[i]);
strs.add(String.valueOf(count));
if(j!=array.length-1) {
i = j-1;
}else{
i=array.length-1;
}
break;
}
}
}
return strs;
}
}
2、优化后的,其实就只有中间的8行代码。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; public class RemoveRepeatArray { public static void main(String[] args) {
String[] sourceArray = { "a", "b", "a", "c", "b", "d", "d", "rsad", "b", "c", "rasdf" };
List<String> arrays = removeRepeat(sourceArray);
for (int i = 0; i < arrays.size(); i++) {
System.out.print(arrays.get(i) + " ");
}
}
public static List<String> removeRepeat(String[] sourceArray) {
List<String> arrays = new ArrayList<String>();
sourceArray = getSort(sourceArray); // 排序, Arrays.sort();不支持对字符串数组进行排序,所以自己写了个简单的排序
System.out.println(Arrays.toString(sourceArray));
int count = 1;
for (int i = 0; i < sourceArray.length; i++) {
//这里多加了一个条件,防止数组下标越界异常
if (i < sourceArray.length - 1 && sourceArray[i].equals(sourceArray[i + 1])) {
count++;
continue;
}
arrays.add(sourceArray[i]);
arrays.add(String.valueOf(count));
count = 1;
}
return arrays;
}
public static String[] getSort(String[] arrays) {
for (int i = 0; i < arrays.length - 1; i++) {
for (int j = 0; j < arrays.length - 1 - i; j++) {
if (arrays[j].compareTo(arrays[j + 1]) > 0) {
String temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
}
}
}
return arrays;
} }
三、后记
1、有错误请指教,谢谢。
2、转发请注明出处。
去重算法,简单粗暴&优化版的更多相关文章
- zk分布式锁-排它锁简单实现-优化版
package Lock; import java.util.Collection;import java.util.Collections;import java.util.List;import ...
- 五子棋的斜对角方向上的规则 -- java编程(简单粗暴版)
五子棋判断输赢规则 --- 斜对角线方向上 一.左上右下方向上 1.分析图 2.代码 /**判断左上右下方向上是否有连续五颗相同颜色的棋子 * 全部遍历法 */ int loop = 0; boole ...
- 最短路-朴素版Dijkstra算法&堆优化版的Dijkstra
朴素版Dijkstra 目标 找到从一个点到其他点的最短距离 思路 ①初始化距离dist数组,将起点dist距离设为0,其他点的距离设为无穷(就是很大的值) ②for循环遍历n次,每层循环里找出不在S ...
- 【转】JavaScript下对去重算法的优化
本人较懒,直接将链接附上: JavaScript下去重算法优化:http://www.linuxde.net/2013/02/12062.html
- 朴素版和堆优化版dijkstra和朴素版prim算法比较
1.dijkstra 时间复杂度:O(n^2) n次迭代,每次找到距离集合S最短的点 每次迭代要用找到的点t来更新其他点到S的最短距离. #include<iostream> #inclu ...
- 足球游戏论坛数据分析--简单粗暴的K均值聚类
在<<足球游戏论坛数据分析--简单粗暴的贝叶斯>>中尝试了贴标签后,一直觉得结果无法接受, 慢慢回想, 其实选择的算法是错误的,原因有 论坛帖子分类并非就是PC/PS/XBOX ...
- YOLO3升级优化版!Poly-YOLO:支持实例分割!
YOLO3升级优化版!Poly-YOLO:支持实例分割! POLY-YOLO: HIGHER SPEED, MORE PRECISE DETECTION AND INSTANCE SEGMENTATI ...
- "简单"的优化--希尔排序也没你想象中那么难
写在前边 大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦. 不过这篇文章呢,还是想跟大家聊一聊数据结构与算法,学校也是大二上才开设了数据结构这 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
随机推荐
- DJango错误日志生成
DJango错误日志生成 setting.py设置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': ...
- [NOIp2012] luogu P1083 借教室
该*的英语,这么长还要背. 题目描述 你有 nnn 个数 ai{a_i}ai,mmm 次操作,每次操作将 [l,r][l,r][l,r] 区间的每个数减去 ccc.要求任何时刻 ∀x∈[1,n]\f ...
- go-select
select语句属于条件分支流程控制方法,不过它只能用于通道. select语句中的case关键字只能后跟用于通道的发送操作的表达式以及接收操作的表达式或语句. ch1 := make(chan ) ...
- linux下 Mysql 安装使用
.安装mysql sudo apt-get install mysql-server mysql-client sudo service mysql restart 2.5.7版本以上修修改updat ...
- 通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱
本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段 ...
- java中多线程 - 如何创建多线程
线程 什么是线程: 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源 表面上 ...
- vue 组件样式如何不影响全局
可以在 "style" 标签中添加 "scoped" 属性. <style scoped> .red { color: #f00; } </s ...
- 追查Could not get a databaseId from dataSource
Mybatis 创建连接池的时候报错: ERROR 2017-03-15 00:44:50,333 commons.JakartaCommonsLoggingImpl:38 Could not get ...
- printf 格式输出代码大全
d,lx,ld,,lu,这几个都是输出32位的hd,hx,hu,这几个都是输出16位数据的,hhd,hhx,hhu,这几个都是输出8位的,lld,ll,llu,llx,这几个都是输出64位的, pri ...
- mysql慢日志分析组件安装
1.pt-query-digest 安装 cd /usr/bin wget percona.com/get/pt-query-digest chmod u+x pt-query-digest yum ...