2022.4.13 参加了华为笔试,三道算法题, 个人感觉题目有点难

第一题:硬件资源的最佳分配

第二题:工单的分配策略

第三题:分糖果

第一题,题目看着都头疼,直接放弃了;

第二题,勉强把题目读懂了,堆了一部分代码,然后后面没思路了,感觉是用动态规划或贪心来做;

第三题,虽然读懂了题目,但最后也是没做出来。

不出意外的话,应该是挂了,没办法,自己太菜怪不得别人。

总结原因的话:

其一,主要还是算法逻辑训练不够,思维不够开阔

其二,对这种应用性较强的题目训练较少,一般这种题目很长,且题目不好理解,需要一定耐心

其三,平时刷题习惯于力扣的核心代码模式,对acm模式了解甚少,第一次用acm模式非常不习惯

由于第三题题目较短,能完整地回忆下来,而且就这样我也不太甘心,所以打算把第三题复盘一下,以下是我复盘的结果。

----------------------------------2022.4.13 华为笔试题 第三题:分糖果---------------------------------

-题目描述:
            现有几袋糖果,老师要将糖果分给小张和小王两个同学,每一袋都有一定数量的糖果,每袋糖果只能全部分给他们其中一人,要求最终两人分得糖果的数量相同。
         
             输入:糖果的袋数和各袋中糖果的数量;
             输出:平分下来的糖果数量,以及两个人分别分到的各袋中糖果的数量,如果无法平分,则直接输出-1
    
    -示例1:
              输入:
                    5
                    2 6 5 4 7
              输出:
                    12
                    2 4 6
                    5 7
    
    -示例2:
              输入:
                    4
                    1 2 3 5
              输出:
                    -1

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>using namespace std;// 回溯:找到数组中的子数组,使子数组和为原数组的一半
void backtrace(vector<int>& nums, vector<int>& res, vector<int>& combine, int target, int startIdx, int sum) {if (sum == target) {res.resize(combine.size());copy(combine.begin(), combine.end(), res.begin());return;}for (int i = startIdx; i < nums.size() && sum + nums[i] <= target; i++) {sum += nums[i];combine.push_back(nums[i]);backtrace(nums, res, combine, target, i + 1, sum);combine.pop_back();sum -= nums[i];}}//分析:要求将一个数组分为两个子数组,子数组和皆为原数组和的一半
int main()
{// input:int n;                   // 糖果的袋数cin >> n;vector<int> nums(n);     // 每袋糖果中,糖果的数量for (int i = 0; i < n; i++) {cin >> nums[i];}// 逻辑代码:int sum = 0;int maxNum = nums[0];for (int num : nums) {sum += num;maxNum = max(maxNum, num);}int target = sum / 2;if (sum & 1 || maxNum > target) {cout << -1 << endl;exit(0);}sort(nums.begin(), nums.end());vector<int> res;                             // 记录平分到的各袋糖果数量 vector<int> combine;  backtrace(nums, res, combine, target, 0, 0);    // 利用回溯得到res, 即其中一人分得的各袋糖果数量if (res.size() == 0) {                          // 没有分得糖果,即平分失败,输出-1cout << -1 << endl;exit(0);}vector<int> res2(nums.size() - res.size());set_difference(nums.begin(), nums.end(), res.begin(), res.end(), res2.begin()); // res2 = nums-res得到剩下的各袋糖果// output:cout << "平分的糖果数量:" << target << endl;cout << "小张分到的各袋糖果数:";for (int num : res) {cout << num << " ";}cout << '\n' << "小王分到的各袋糖果数:";for (int num : res2) {cout << num << " ";}cout << endl;system("pause");return 0;
}

华为笔试题分享:分糖果相关推荐

  1. 潇洒郎: 去哪儿2021届/2020年开发岗笔试题分享

    去哪儿2021届/2020年开发岗笔试题分享 1. 2020年,直播已经成为去哪儿网酒店预售的新武器, 去哪儿网CEO刚哥想从公司的m名员工中挑选n名参与自己的直播,已知m小于100请问一共有多少种选 ...

  2. 华为笔试题 -- 多个数组按顺序合并(Java代码实现)

    华为笔试题 – 多个数组按顺序合并(Java代码实现) 题目描述: 现在有多组整数数组,需要将他们合并成一个新的数组.合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉 ...

  3. 2019届华为笔试题(软件卷)

    华为笔试题共3道编程题.第一题100分,第二题200分,第三题300分,一共600分. 第一题: 输入描述: 1.忽略小数点,例如"A1.2",认为包含整数1和2: 2.如果整数的 ...

  4. 华为笔试题---明明的随机数

    题目 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...

  5. 神州数码笔试题C语言,神州数码程序类笔试题分享

    神州程序类笔试题分享: 神州数码笔试1)description of the students table: sid_id number start_date date end_date date w ...

  6. 育碧Web实习笔试题分享

    育碧的Web实习笔试题分享 笔试题目一共有20道,主要有选择题,简答题以及编程题,但是大部分都是简答题,题干是全英语的,但是大致题意还是能够读懂.考查知识大体涉及JavaScript.HTTP.CSS ...

  7. 【leetcode】第394题:字符串解码(华为笔试题)

    题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...

  8. 【超详细】数据分析笔试题分享,可以收藏后仔细阅读

    大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 又到了笔 ...

  9. 金九银十!2021阿里+头条+腾讯等大厂Java笔试题分享

    前言 时至今日, Spring在Java生态系统与就业市场上,面试出镜率之高,投产规模之广,无出其右.随着技术的发展,Spring从往日的IoC框架,已发展成Cloud Native基础设施,衍生出大 ...

  10. 数据分析与数据挖掘方面招聘的笔试题分享

    上网搜索到一些相关职位的笔试题,集结于此,希望对大家有用 A.阿里巴巴2011数据分析师实习生笔试题 1.什么是异常值,列举一种找出连续型变量异常值的方法. 2.什么是聚类分析,有哪些聚类分析方法,写 ...

最新文章

  1. 怎样用c语言写高速超速罚款标准,pta高速公路超速处罚(C语言)
  2. 【iOS数据持久化】偏好设置(UserDefaults)
  3. 【技术短文】基于深度负相关学习的人群计数方法
  4. 深入理解分布式技术 - 负载均衡策略
  5. java论文翻译_Java技术(外文文献翻译)
  6. Exception in thread “main“ java.lang.IllegalStateException: Duplicate key xxx
  7. 微型计算机和接口技术考题,微型计算机接口技术以及应用考题
  8. adb 最大连接_工具集 | Android Studio—使用 WI-FI 进行 ADB 调试
  9. bat中的start
  10. 查找算法——插值查找
  11. 怎样才算优秀的xyz员
  12. 位运算 取某一位 java_Java 位运算妙用
  13. java修改excel图表数据源,导出excel图表文件
  14. el-table 树形表格 自定义展开图标_目前比较满意的安卓桌面启动器:非线性动画 + 精美图标包...
  15. ubuntu输入法快捷键设置ctrl+shift
  16. 【期末复习】现代管理科学基础
  17. Scratch软件编程等级考试一级——20220918
  18. Go语言学习系列 -- 大道至简—GO语言最佳实践​​​​​​​
  19. Linux(Debian)安装Geany教程
  20. unraid虚拟linux系统,UNRAID教程:3分钟用unraid自带的虚拟机安装黑群晖NAS DSM系统很强大!...

热门文章

  1. cs231n softmax作业笔记
  2. java batik 乱码_Batik渲染png图片异常的bug修复
  3. Oracle P6培训系列:09定义计划编制视图
  4. 一个简单的dos命令实现无限弹窗,卡死电脑
  5. oracle 错误01017,ORA-01017:用户名密码出错 故障实例
  6. 机器学习十大算法简介
  7. 【MATLAB深度学习工具箱】学习笔记--字符识别Character Recognition
  8. ubuntu vscode 配置字体_配置vscode终端字体,vscode终端字体
  9. 国际学术期刊会议大排名与常用的期刊会议名字
  10. SQL 比较全的银行列表、带名称缩写、带银行logo