去重算法,简单粗暴&优化版
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版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
随机推荐
- idea破解版安装、配置jdk以及建立一个简单的maven工程
idea破解版安装.配置jdk,配置jdk环境变量以及建立一个简单的maven工程 一.idea破解版以及配置文件下载 下载网址:https://pan.baidu.com/s/1yojA51X1RU ...
- JNI静态注册与动态注册详解
JNI注册,是指将java层方法(native关键字修饰的)和C层方法对应起来,以实现java层代码调用c层代码的目的.JNI注册分为静态注册和动态注册两种,静态注册是通过固定格式方法名进行关联,动态 ...
- MySQL基础(三)多表查询(各种join连接详解)
Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...
- 基于Spark的电影推荐系统(推荐系统~2)
第四部分-推荐系统-数据ETL 本模块完成数据清洗,并将清洗后的数据load到Hive数据表里面去 前置准备: spark +hive vim $SPARK_HOME/conf/hive-site.x ...
- unittest中HTMLTestRunner模块生成
unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner 一.导入HTMLTestRunner 方法1.这个模块下载不能通过pip安装了,只能下载后手动 ...
- 使用Swagger服务搭建.Net Core API
使用Swagger服务搭建.Net Core API 创建.Net Core API 新建项目.文件——新建——项目 选择应用程序模板. 设置存放路径,命名方案名称. 创建API. 搭建成功. 使用S ...
- [网络流 24 题] luoguP2763 试题库问题
[返回网络流 24 题索引] 题目描述 假设一个试题库中有 nnn 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 mmm 道题组成试卷.并要求试卷包含指定类型的试题. ...
- 《深入理解Java虚拟机》-----第10章 程序编译与代码优化-早期(编译期)优化
概述 Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运 ...
- shell变量(二)
变量名的命名规范: 1.命名只能使用英文字母.数字和下划线,且不能以数字开头: 2.不能存在空格‘: 3.不能使用标点符号: 4.不能使用bash里的关键字(可使用help命令查看保留关键字) 变量的 ...
- python编程系列---tcp服务端的简单实现
流程如下: """tcp服务端创建流程1. 创建服务端的tcp socket : server_socket 用于监听客户端的请求2. 绑定端口3. server_soc ...