20200902——华为软件笔试

这篇博客详细介绍了华为软件笔试中的三道题目:1. 和最大的三个数,通过例子解释了如何找到拿糖数目和最大的三个小朋友;2. 湖泊数量,讨论了使用BFS解决二维数组中湖泊计数的问题;3. 01背包问题,分析了用贪心策略解决的局限,并探讨了动态规划的适用性,包括最优化原理和无后效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和最大的三个数

大意:
两种糖,1和2
每个小朋友只能拿一种颜色的糖。
找出三个小朋友,拿的糖数目和最大(三个小朋友拿同一种颜色的糖)
若出现相等情况,取最小序号的那个小朋友所在组。

90%用例。

湖泊数量

二维数组,'S’为有水的区域,H为无水的区域,相邻的S区域(被H和边界包围)为湖泊。求湖泊的数量。

用bfs:80%用例(数组越界??找不到对应位置)

01背包

卡车装货物,体积有限,使价值最大。

用贪心:63.45%用例

链接:01背包

验证可行性 既然开头已经说了两个验证问题是否可以使用动态规划求解的方法,那么为何不试一试呢?

先来看看最优化原理。同样,我们使用反证法:

假设(x1,x2,…,xn)是01背包问题的最优解,则有(x2,x3,…,xn)是其子问题的最优解,假设(y2,y3,…,yn)是上述问题的子问题最优解,则有(v2y2+v3y3+…+vnyn)+v1x1 > (v2x2+v3x3+…+vnxn)+v1x1。说明(X1,Y2,Y3,…,Yn)才是该01背包问题的最优解,这与最开始的假设(X1,X2,…,Xn)是01背包问题的最优解相矛盾,故01背包问题满足最优性原理。

至于无后效性,其实比较好理解。对于任意一个阶段,只要背包剩余容量和可选物品是一样的,那么我们能做出的现阶段的最优选择必定是一样的,是不受之前选择了什么物品所影响的。即满足无后效性。

自上而下记忆法
就像上一篇里的解法一样,自上而下的解法与分治法的区别就是增加了一个数组用来存储计算的中间结果来减少重复计算。这里,我们只需要多定义一个二维数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值