【笔试】秋招某司编程题,你可能会遇到哦~

一司

题目描述:

导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。
现在给出n个参演人员的身高,问在他们站成一圈时,相邻演员的身高差的最大值至少是多少?请帮忙计算一下。

输入描述:

1.输入包括两行,第一行有1个正整数,代表人数n;

2.第二行有n个空格隔开的正整数h,表示第i个演员的身高;

3.数据保证2<=n<=105,1<=h_i<=109;

输出描述:输出包括一个正整数,表示答案;


题目描述:

小明用计算机随机生成了N个正整数,他希望从这N个数中选取若干个数,使得它们的和等于M。 这些随机生成的数字可能会相同,但是每个数字最多只允许使用一次。当然这样的选取方案可能不存在,也可能有多个。
现在希望你编写一个Java程序,能够找出数字个数最少的选取方案,输出对应的最少数字的个数,如果无解输出“No solution”。

输入描述:

1.单组输人,每组输入2行。

2.第1行包含两个正整数N和M,分别表示初始输入的正整数个数和目标数字和(N≤=1e3,M<=1e5)。

3.第2行为N个正整数,两两之间用空格隔开(每一个正整数均小于等于1e5)。

输出描述:输出数字个数最少的选取方案中所包含的最少数字个数,如果无解输出"No solution"

解答:

要解决这个问题,可以使用动态规划方法。创建一个长度为 M+1 的数组 dp,其中 dp[i] 表示达到和为 i 的最小数字个数。

初始化 dp 数组为一个大的数(例如 Integer.MAX_VALUE),然后设置 dp[0] = 0

遍历输入数组中的每个数字 num,对于每个 num,从 M 倒序遍历到 num,更新 dp 数组。

最后,输出 dp[M],如果 dp[M] 是初始值,则输出 “No solution”。

二司

题目描述:

给定不同面额的硬币coins和一个总金额amount,编写一个算法来计算可以凑成总金额的组合数。假设你拥有有限数量的各种面额的硬币,并且硬币的面额是按升序排序的。求凑成总金额的组合数(注意每种硬币的数量不超过给定的上限数量)。

输入描述:

1.一个整数总金额amount (1 <= amount <= 10^4);

2.一个包含不同硬币面额的升序整数数组coins (1 <= coins[i] <= 10^4);

3.一个包含对应硬币面额数量上限的整数数组limits,其中 limits[i]表示对面额 coins[i] 的硬币数量上限 (1 <= limits[i] <= 100);

输出描述:凑成总金额的组合数;
注意:不要超出每种硬币数量的限制;


题目描述:

有一个字符数组A,例如{“A1”,“A2”,“A3”},另外有一个字符串数组B,例如{“B1”,“B2”,“B3”},在不打乱原数组顺序的情况下,求两个数组合并的所有组合数;

三司

小欧拿到了一个数组,她将所有的元素相乘,记为x。例如,对于数组[3, 1, 2],x = 3 * 1 * 2 = 6。
现在小红可以进行若干次以下操作:

操作1:将x乘以2。
操作2:将x除以2(该操作仅在x为偶数时才可进行)。

小欧希望最终 x 的因子数量尽可能接近 k。换言之,若 x 的因子数量为 p,则需要使得 k-p 的绝对值尽可能小。如果有多种方案,小欧希望操作次数尽可能小。你能帮帮她吗?并且要注意时间复杂度不能太大。

输入描述:

1.第一行输入两个正整数n和k。

2.第二行输入n个正整数a[i],代表数组的元素。
1 <= n <= 10^5;
1 <= k <= 10^10;
1 <= a[i] <= 100;

输出描述:两个整数,分别代表操作1的次数和操作2的次数;


小欧定义一个字符串是"oppo”型字符串,当且仅当该字符串满足以下两个条件:
1.字符串长度为4,第一个、第四个为元音,第二个、第三个为辅音。
2.字符串为回文串。

例如,“awwa”、"uttu"都是 oppo 型字符串。
现在给定一个字符串,小欧想知道,该字符串有多少个"oppo"型子序列?

子序列的定义:字符串按原串的顺序选若干字符形成的字符串,称为子序列。

提示:只有"a、e、i、o、u"这五个字母为元音,其余字母均为辅音;

输入描述:一个仅包含小写字母的字符串,长度不超过200000;

输出描述:"oppo"型子序列的数量。由于答案可能过大,请对10^9+7取模。

若二叉树有5个叶结点,其权值分别是10,14,18,23,30,则其最小的带权路径长度(WPL)是多少?

若以{4, 8, 12, 16, 20, 24, 28, 32,36, 40}作为叶子结点的权值构造一棵哈夫曼树,则其带权路径长度是多少?

四司

一个增序的数组首位相连,在某个位置断开而形成数组,称之为旋转数组。给定一个值,如何判断该值位于旋转数组中。算法复杂度需为O(logn), 例如:输入:数组[6,7,9,0,0,1,4,6] 以及值1,需查找1是否在该数组中;输出:true;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值