去重算法,简单粗暴&优化版
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版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
随机推荐
- C#学习--Oracle数据库基本操作(连接、增、删、改、查)封装
写在前面: SQLserver的C#封装:https://www.cnblogs.com/mexihq/p/11636785.html 类似于上篇有关SQLserver的C#封装,小编对Oracle数 ...
- OpenCV支持Qt用户界面
在运行opencv程序的时候报下面的错误: ... The library is compiled without QT support in function ... 原因是在使用cmake安装op ...
- Web前端助手-功能丰富的Chrome插件
整合优秀的前端实用工具.免费,可配置的强大工具集 示例 安装 github仓库: https://github.com/zxlie/FeHelper 官网地址:https://www.baidufe. ...
- 数据结构4_java---顺序串,字符串匹配算法(BF算法,KMP算法)
1.顺序串 实现的操作有: 构造串 判断空串 返回串的长度 返回位序号为i的字符 将串的长度扩充为newCapacity 返回从begin到end-1的子串 在第i个字符之前插入字串str 删除子串 ...
- python中使用logging将日志写入文件或输出到控制台
import logging import os class Logger: def __init__(self, name=__name__): # 创建一个loggger self.__name ...
- 百万年薪python之路 -- JS基础介绍及数据类型
JS代码的引入 方式1: <script> alert('兽人永不为奴!') </script> 方式2:外部文件引入 src属性值为js文件路径 <script src ...
- Gstreamer基础教程10 - Streaming
摘要 我们把直接从网络播放一个媒体文件的方式称为在线播放(Online Streaming),我们已经在以往的例子中体验了GStreamer的在线播放功能,当我们指定播放URI为 http:// 时, ...
- Object 对象方法学习之(1)—— 使用 Object.assign 复制对象、合并对象
作用 Object.assign() 方法用于把一个或多个源对象的可枚举属性值复制到目标对象中,返回值为目标对象. 语法 Object.assign(target, ...sources) 参数 ta ...
- day3-02 python入门之基本的数据类型
目录 一.整型(int) 二.浮点型(float) 三.字符串类型(str) 字符串在python2和python3中的细微区别 四.复数 五.列表(list) 六.数据字典(dict) 定义方式 七 ...
- windows系统先安装hexo
一.安装node.js 下载地址为:https://nodejs.org/en/可以根据自己需要下载对于的版本. 打开cmd,输入指令 node -v 若出现上图这样的结果则说明安装好了. 二.安装h ...