20200429广联达笔试题

概述

广联达 9.00 - 22.00 自选两个小时做题,赛码白板写题,不能编译运行。一共四个大题

第一题

题目

给一个数组arr[], 要求按照每个元素的二进制表示中1的数目升序排序,如果1的数目一样,就按着大小排序。
样例:
输入:乱序这个数组,输出这个数组[0, 1, 2, 8, 3, 5, 6, 7]
输入:乱序这个数组 ,输出这个数组[1, 2, 4, 8, 16, ]
输入:。。。 输出:[10000, 10000]
输入:。。。 输出:[10, 1000, 10000, 1000]
数组长度 [1, 500] 数字大小 [0, 10^4]

思路

  1. 把每个数字包装成 值+1的个数的形式,形成一个集合
  2. 对集合自定义排序,先按1 的数目,再按数值大小
  3. 对排序后的集合遍历取值到结果数组,输出答案。

第二题

题目

N个囚犯,N个房间,N> 3,编号都为 1 - N,囚犯号和监狱号一一对应,现在重新分配房间,要求相邻编号的囚犯不能分配到相邻间,输出分配方案
in:4; out :2413,3142

思路

n个数的全排列,回溯法过程中进行剪枝,相邻的数值不能放相邻房间。

第三题

题目

有一个队列,里边每个人表示为[h, k],h为这个人的高度,k 为排在这个人前边且身高大于等于h的人的个数。要重建这个队列。
人数 < 1100;
in: [ [7,0],[4,4],[7,1],[5,0],[6,1],[5,2] ]
out: [ [5,0],[7,0],[5,2],[6,1],[4,4],[7,1] ]

思路

这题不会!!

第四题

题目

给一个数组为钢筋的长度,不能截断,不能不用,可以连接,要判断能不能拼成正方形。
in : [1,1,2,2,2] out:true
in:[3,3,3,3,4] out :false

思路

  1. 求总和除以4,得到边长。不能整除false;
  2. 遍历长度数组
    大于边长 false
    等于边长计数cnt
    小于边长加入小于队列
  3. cnt == 4,true;
  4. cnt < 4,去小于队列里找 4-cnt 个和为边长的组合,有就true,没有false
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值