之前一向刷leetcode,做了这么多算法提,总觉得没什么用武之地,不知道大家有没有这样的状况,刷了这么多算法,却实践在工作中的运用的很少。 然后这两天看到有个需求,不算难,在leetcode应该也便是简略等级,总算有个实践的问题来练练手了,高兴

先来看问题是什么

如下图,服务器获取到一个列表,这个列表中的数据类型有两种UI显示办法,一种是小的方块,一行能够放5个,另一种是大方块,一行只能放一个,现在呢,服务器回来的次序是不知道的,但需求整个列表除了终究不能有空的空隙,如图:

工作中遇到的算法(1) 格式化排序工作中遇到的算法(1) 格式化排序

一开始想的leetcode每日一题是运用双指针,一个指向小方块,一个指向大方块,然后遇到榜首列就判别,是否需求刺进大方块,不然刺进小方块,但遇到了几个问题:

  1. 什么时分刺数组排序进大方块数组词多音字组词语,小方块补完空位后,怎样知道要不要刺进大方块
  2. 其时界面的榜首列方位并不是数组方位取5的余数,因为大方块一个就占了一行
  3. 当遇到连续的大方块,小方块怎样去跨过几个大方块去补位

想了一下没什么思路,那就换个方向吧

假如我用一个变量 a 去存大方块方针,当遇到空位先存起来,然后等到机会合适再把这个大方块刺进进去,是不是逻辑清楚一点

i 是数组方位

bigNum 是已数组添加的大方块数量

此刻的界面pos = ( i – (a != nulleetcode和牛客网区别l?1服务器是什么:0) + bigNum ) % 5

然后对pos%5取余,余数为0就判别a是否空,leetcode每日一题不为空的话就刺进,**bigNum++ ,**为空就继续看下一个是否是大方块

这样处理了1,2问题,但还有一个问题3没处理,,连续大方leetcode怎样刷题块怎样处理,聪明的小伙伴应该现已想到了,把a方针换成部队就能够了,部队先进先出的特性十分符合咱们的需求,当遇到大方块不能刺进的时分,存入部队,等合适机会出部队,然后在遍历完一遍以后,把部队剩下服务器的大方块刺进到列表结束就能够了

伪代码:

List<Data> sort(List&lt服务器反常是什么意思;Data> or算法工程师iginList) {
List<Data> resultList = new ArrayList<>();
Queue<Data> bigQueleetcode刷题攻略ue = new ArrayDeque<>();数组去重办法
int bigNum = 0;
f服务器是什么or (int i = 0; i < originList.size(); i++) {
Data cur = orig服务器体系inList.geleetcode是干什么的t(i);
if ((i - bigNum - bigQueue.size()) % 5 == 0 && big服务器品牌前十大排名Queue.size() > 0) {
resultList.add(bigQue数组初始化ue.poll());
bigNum++;
}
if (cur.isBi算法工程师需求掌握什么g) {
resultList.add(cur);
} else {
if ((i - bigNum) % 5 == 0) {
resultList.服务器地址在哪里看add(cur);
bigNum++;
} else {
bigQueue.a服务器拒绝访问dd(cur);
}
}
}
resultList.addAll(bigQueue);
retuleetcode官网rn resultList;
}