华为笔试题
/*
* 给定一个数组,数组的数字代表的是砖块的长度,
* 现使用其中的长度进行叠加,
* 每一层一块或者两块砖,每一层必须长度相同,砖块必须使用完,
* 最多能垒多少层?
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class solution
{
public:
int max_lays(vector<int>& nums){
sort(nums.begin(),nums.end());
int length = nums.size();
if(length == 0){
return false;
}
int lays = 1;
int lays2= 0;
int left = 0;
int right = length - 1;
if(nums[right] == nums[right-1]){
while (left<right){
while(nums[right] == nums[right-1]){
++lays;
right--;
}
if(nums[left]+nums[right-1] == nums[length-1]){
lays++;
left++;
right--;
}else{
return -1;
}
}
}else{
if(length%2 == 0){
while (left < right){
if(nums[left]+nums[right] == nums[left++]+nums[right--]){
lays2++;
}else {
return -1;
}
}
return lays2;
}else{
return -1;
}
}
return lays>lays2?lays:lays2;
}
};
int main(){
vector<int> nums0{10,20,30,60,70,80,90,100,100,100};
vector<int> nums1{10,20,30,70,80,90,100,100,100};
vector<int> nums2{10,20,30,70,80,90};
vector<int> nums3{20,30,70,80,90};
vector<int> nums4{20,30,70,80,90,90,90};
solution sol;
int max_lay0 = sol.max_lays(nums0);
int max_lay1 = sol.max_lays(nums1);
int max_lay2 = sol.max_lays(nums2);
int max_lay3 = sol.max_lays(nums3);
int max_lay4 = sol.max_lays(nums4);
cout<<"the max_lay0 is :"<<max_lay0<<endl;
cout<<"the max_lay1 is :"<<max_lay1<<endl;
cout<<"the max_lay2 is :"<<max_lay2<<endl;
cout<<"the max_lay3 is :"<<max_lay3<<endl;
cout<<"the max_lay4 is :"<<max_lay4<<endl;
return 0;
}
花了好久时间的调试,验证。思路是对的 思维不够快,代码规范性不够。
使用排序解决堆叠砖块问题
这篇博客介绍了一道华为笔试题,涉及数组处理和堆叠砖块的策略。给定一个数组,数组元素代表砖块长度,目标是用这些砖块一层一层地堆叠,每层砖块数量可以是1或2,且每层长度必须相同。通过排序和双指针技术,找到能堆叠的最大层数。代码中展示了如何实现这一策略,并给出了多个测试用例的运行结果。
5836

被折叠的 条评论
为什么被折叠?



