【我会的都很简单】暴力遍历

今天做了几道关于暴力遍历的问题,share之。

1.题意解释完即为:给定一系列的矩形的长和宽,要求排序,后面的矩形的长宽要都比前面的矩形的来的大,问需要排几次。

乍一看之下,没有什么很好的思路,最先想到的是,将矩形的长和宽映射到坐标上。创建一个足够大的数组a[10000][10000],假设某个矩形为3x5,则 a[0][0],a[0][1]....a[2][4]都+1.以此类推,这样遍历一遍数组,就能把矩形的重叠情况记录下来了。但是似乎到此还是没有解决问题的思路。参考,这似乎是解别的问题的思路。

最终的方案还是暴力遍历,先按长排序,然后从边长最短的矩形开始,查找后续的能够完全覆盖他的矩形,以此类推。

这个思路其实还是有点类似于基数排序的思路的。

伪代码如下:

// 对L 从小到大排序,同时调整W 和L 保持一致

selectSort(L);

// 对于L[i]相同的时候,再对W排序

int startIndex=0;

for(int i=0;i<N;i++){

selectSort(startIndex,i,W);

startIndex=i;

}

int nodeCount=0;//记录已经访问了多少矩形

int max=W[0];

while(nodeCount < N){

boolean onlyOne=true;

for(1 : N){

//从前往后找,发现宽度比之前最大的大的,则一定可以覆盖,因为已经按照L排序,并且L 相同的情况下,也按照W 排序,不会产生漏掉矩形的情况。

if(W[i] >= max){

nodeCount++;

onlyOne =false;

}

}

if( onlyOne){

delete();//删除当前的节点

nodeCount++;

}

}




2.N 个人有序,M 的空间(N>M),问给出的序列能否满足出空间的顺序。

例子:

5个人,3个空间,则问1,3,5,4,2 是否可能

首先,N个人是有序的,则3个空间先被1,2,3 个人占满,然后第1个人出去,4进来占据空间,3出去,5进来占据空间,5出去,4出去,2出去。

则出空间的顺序为:1,3,5,4,2 即给定的顺序为可能的。

这个问题,乍一看,觉得可能是和栈或是队列有关的题目,但是实际情况是,并没有限制只有从一头才能出去。再乍一看,还以为是拓扑排序相关。还没温习完图谱排序的知识。


TODO:

图中任意点对的距离和问题。--deadline 04.11





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值