华为面试题目

使用排序解决堆叠砖块问题
这篇博客介绍了一道华为笔试题,涉及数组处理和堆叠砖块的策略。给定一个数组,数组元素代表砖块长度,目标是用这些砖块一层一层地堆叠,每层砖块数量可以是1或2,且每层长度必须相同。通过排序和双指针技术,找到能堆叠的最大层数。代码中展示了如何实现这一策略,并给出了多个测试用例的运行结果。

华为笔试题

/*
 * 给定一个数组,数组的数字代表的是砖块的长度,
 * 现使用其中的长度进行叠加,
 * 每一层一块或者两块砖,每一层必须长度相同,砖块必须使用完,
 * 最多能垒多少层?
 */


#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;
}

花了好久时间的调试,验证。思路是对的 思维不够快,代码规范性不够。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值