算法交流:分享我的一个算法,实现项目需求
昨天一个大三的师姐和我探讨了一个有关字符串解析的问题,我觉得比较有意思,于是今天下午抽出
20分钟实现了一下,因为这个项目是一个学院的选课系统,为了导数据方便呢,他们采用了之前选课系统的数据库。
其实这类web项目一般难度不会很大,但是这个早期的数据库设计的比较个性,其中记录上课时间的数据,在数据库
里竟然使用的是一个20位01串。因为我们学校一个学期最长是20周的课时。1代表这周有课,0代表没有课,最后要
解析这个字符串,把字符串解析成一个通俗的话,例如:数据库里存的是"00101111110111101110",那么通过这个
程序要转换成“3周 5-10周 12-15周 17-19周”。其实还是比较有意思的。当然我举的这个例子是比较夸张,因为
学校不可能这样排课。这样排课学生不就崩溃了。这么散乱。一般也就是00000000111111111111这种的,或者
11111111111100000000,但是既然实现一个算法,当然就要具有通用性,要把所有情况的考虑到。于是便有了
这个项目需求,因为这个项目使用java来搞,所以俺就以java为例,写一下实现。之前师姐用的是一些面向过程语言里
经常使用的一些数据类型,例如int,char,char[],String[]。既然用java,俺就不用这些东东了,用的也不方便,
就使用Integer,String,List<Integer>,List<String>。不过都说StringBuilder比较快,但是我还是没有用这个。
因为不熟,考虑到线程同步,也许有人会用StringBuffer,不过还是需要一个synchronized()来搞一下才放心。
本着实现为先,步步优化的原则,我就用最顺手的String了。一个算法的好坏,衡量是多方面的,代码精简,代码易读,
命名规范,灵活多变。这些都是衡量标准。但是有时要有所取舍。废话侃了那么多,如果有兴趣的朋友可以,试着用您
最擅长的语言或脚本写一写,或者考验一下自己的速度,或者追求一下最高的执行效率,实现一下,我觉得还是挺有意
思的。晚辈在这里请教各位,交流一下实现方案。如果有用java实现更高效的算法,我就不用现在我写的这个了,斗胆
发到首页,渴望交流学习。
------------------------------------------------------------------------------
我的实现:(就当抛砖引玉了)
1 package com.sy.string;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 public class Read01 {
7
8 public static String convert(String input) {
9
10 List<Integer> intList = new ArrayList<Integer>();//没有课的周
11 List<String> strList = new ArrayList<String>();//输出的字符串片段
12 String result = new String();//返回值
13 String string = input;//接受字符串
14 String clips=null;//中间变量:字符串片段
15 Integer temp=1;//中间变量:有课的周
16 Integer temp2=0;//中间变量:循环次数
17 Integer temp3=0;///中间变量:上一次循环是第几周
18
19 while (string.indexOf("0") != -1) {
20 intList.add(string.indexOf("0")+1+temp2);
21 string = string.substring(0, string.indexOf("0"))
22 + string
23 .substring(string.indexOf("0") + 1, string.length());
24 temp2++;
25 }
26 for (Integer num:intList) {
27 if(num-temp3==2){
28 strList.add((num-1)+"周 ");
29 }
30 if (num==1) {
31 clips="";
32 strList.add(clips);
33 } else {
34 clips=temp+"-"+(num-1)+"周 ";
35 if(temp<(num-1))
36 strList.add(clips);
37 }
38 temp=num+1;
39 temp3=num;
40 }
41 if(temp3<20){
42 if((temp3+1)==20){
43 strList.add("20周");
44 }else{
45 strList.add(temp3+1+"-20周");
46 }
47 }
48 for (String s:strList) {
49 result+=s;
50 }
51 return result;
52 }
53
54 public static void main(String[] args) {
55 String str = new String("00101111110111101110");
56 System.out.println(convert(str));
57 }
58 }
59
谢谢。
算法交流:分享我的一个算法,实现项目需求相关推荐
- c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
实例分享cmake编译一个简单c++项目(demo) 发布时间:2020-09-19 21:08:04 来源:脚本之家 阅读:63 作者:mdxy-dxy 下面通过一个小例子来说明cmake编译一个c ...
- noj数据结构稀疏矩阵的加法十字链表_一个算法毁了一款好游戏?算法和数据结构到底有多重要?...
来源 | 异步 | 文末赠书 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多 ...
- 一个算法对于某个输入的循环次数是可以事先估计出来的_数据结构与算法:算法...
算法(algorithm )是指令的集合,是为解决特定问题而规定的一系列操作.它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出.一个算法通常来说具有以下五个特性: 输入:一 ...
- 大剑无锋之如何评判一个算法的优劣【面试推荐】
①时间复杂度:同样的输入规模(问题规模)花费多少时间 ②空间复杂度:同样的输入规模花费多少空间(主要是内存) 以上两点越小越好 ③稳定性(健壮性):不会因为输入的不同而导致不稳定的情况发生 ④算法思路 ...
- 一个算法毁了一款好游戏?算法和数据结构到底有多重要?
来源 | 异步 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多. 首先是存档 ...
- 算法描述怎么写伪代码java_算法描述---伪代码
算法描述 算法描述是指对设计出的算法,用一种方式进行详细的描述,以便与人交流.描述可以使用自然语言.伪代码,也可使用程序流程图,但描述的结果必须满足算法的五个特征. 使用自然语言描述算法显然很有吸引力 ...
- 【算法的时间复杂度和空间复杂度】-算法02
算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...
- 分享一个开源的项目,数据结构和算法必知必会的50个代码实现
数据结构和算法必知必会的50个代码实现 这个开源项目是有前Google工程师打造出来的,使用了c,go,java,python,php等很多中语言实现了一些数据结构和算法,对于喜欢算法的来说可谓是一个 ...
- 2020腾讯广告算法大赛分享(冠军)
写在前面 2019年冠军选手成功卫冕! 代码地址:https://github.com/guoday/Tencent2020_Rank1st 从初赛冠军.复赛冠军,然后到最佳答辩,一路披荆斩棘,再次感 ...
- 【算法实践】搜狗信息流推荐算法交流.pdf(附下载链接)
今天给大家带来搜狗科技王东先生所做的分享<搜狗信息流推荐算法交流.pdf>,本分享共包含如下四大部分: 1.推荐系统架构: 2.文章NLP: 3.召回算法: 4.个性化排序. 本PPT共2 ...
最新文章
- webpack打包路径更改_扫盲: Webpack 从扫盲到手撸(上)
- SQL-16 统计出当前各个title类型对应的员工当前薪水对应的平均工资。结果给出title以及平均工资avg。...
- 我的总结SVN的使用
- Ceph分布式存储高性能设计
- 如何给字体添加底色indesign_“美哉汉字”2020字体设计专家工作坊预告+报名
- php 注册树,php设计模式-注册树模式
- 对团队建设与管理的几点看法
- Datalore:用于机器学习可视化的新Web方案!
- 什么是区块链预言机(BlockChain Oracle)
- sql 简单加密函数
- 第十八节:教你如何使用ES6的Promise对象
- pytesseract识别数字
- 深圳能耗管理系统_综合能源管理平台
- CH9102国产USB转高速串口芯片兼容替代CP2102
- 黑龙江省大学计算机学校排名2015,2015黑龙江省最佳大学排行榜
- jzoj. 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
- 1000内不能被7整除的数
- 微博android升级7.000,华为 Android 7.0 升级计划曝光:G9 青春版 /Nova 也有份
- 一文完全理解模型ks指标含义并画出ks曲线(包含代码和详细解释)
- 西门子PLC1200学习之比较指令
热门文章
- 六石风格文档范例:做测试结果表格
- error: implicit declaration of function ‘RAND_egd’ [-Werror=implicit-function-declaration]
- LINUX下载编译sqlite-jdbc(支持mips64el/loongarch64的jar包下载)
- 编程基本功:以输入法为例,谈谈测试案例的设计
- 编译OpenJDK8:configure: Could not compile and link with freetype. This might be a 32/64-bit mismatch.
- JDK8-u271/u272的jre和jdk/jre的文件有差异
- C盘空间丢失30G,怎么也找不到
- 看到一个RISC-V指令集的评论
- 僵化封闭是世界的新主流?
- 网络故障一例:网络不能用,ping出错