阿里面试算法习题集1
比如0,1,2,3,4这五个数字组成一个圆。如果每次从数字0开始删除第三个数字,那么删除的前四个数字依次是2、0、4和1,所以最后剩下的数字是3。
示例1:
输入:n = 5,m = 3。
输出:3
示例2:
输入:n = 10,m = 17。
输出:2
请实现一个函数,输入一个整数,输出二进制表示的数字1。比如把9表示成二进制是1001,两位是1。因此,如果输入9,函数输出2。
示例1:
输入:000000000000000000000000000001011。
输出:3
说明:在输入的二进制字符串00000000000000000000000000101中,* *有三个数字“1”。
数字被序列化为一个字符序列,格式为0123456789112131415…在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,依此类推。
请写一个函数,求任意第n位对应的数。
示例1:
输入:n = 3
输出:3
示例2:
输入:n = 11
输出:0
请注意,这必须是长类型。
输入一个非负整数数组,将数组中的所有数字拼接成一个数字,打印出所有可拼接数字中最小的一个。
示例1:
输入:
输出:“102”
示例2:
输入:
输出:“3033459”
老师想给孩子们分发糖果。有n个孩子站成一条直线,老师会根据他们的表现提前给他们打分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到1块糖。
在邻近的孩子中,得分高的孩子必须得到更多的糖果。
那么老师至少需要准备多少糖果呢?
示例1:
输入:
输出:5
说明:你可以分别给这三个孩子分发2,1和2个糖果。
示例2:
输入:
输出:4
说明:可以分别给这三个孩子分发1,2,1的糖果。
第三个孩子只拿到了1的糖果,已经满足了以上两个条件。
一条环路上有n个加油站,其中第I个加油站有汽油气。
成本=
输出:3
贪婪的想法是,只要和大于0,就可以绕过去。
起始位置的贪婪思想是,如果sum从开始就小于0,那么一定不是从上一个位置开始,而是从当前的下一个位置开始,sum = 0被清零。
给定一个非负整数数组,您最初位于数组的第一个位置。
数组中的每个元素代表在该位置可以跳转的最大长度。
您的目标是以最少的跳数到达数组的最后一个位置。
示例:
输入:
输出:2
说明:跳到最后一个位置的最小次数是2。
从下标0跳到下标1,跳到1,再跳3步到达数组的最后一个位置。
给定一个非负整数数组,您最初位于数组的第一个位置。
数组中的每个元素代表在该位置可以跳转的最大长度。
判断自己是否能到达最后的位置。
示例1:
输入:
输出:真
说明:我们可以先跳1,从位置0跳到位置1,再从位置1跳到最后一个位置3步。
包含字母A-Z的消息以下列方式编码:
一个'-& gt;1
b '-& gt;2
...
z '-& gt;26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例1:
输入:“12”
输出:2
说明:可以解码为“AB”(1 2)或“L”(12)。
这里一定要注意第一个数是0的情况。s.charAt(0) == '0 '。如果第一个数字是0,我们必须直接返回0。
给定一个数组,它的第I个元素是给定股票在第I天的价格。
如果最多只允许你完成一次交易(即买卖一只股票一次),设计一个算法,计算出你能获得的最大利润。
注意:买股票之前不能卖股票。
示例1:
输入:
输出:5
解释:第二天买入(股价= 1),第五天卖出(股价= 6)。最大利润= 6-1 = 5。
注意利润不能是7-1 = 6,因为卖价需要大于买价;同时,不能先卖股票再买。
给定三个字符串s1、s2、s3和s3,验证S3是否由s1和s2组成。
示例1:
输入:s1 = "aabcc ",S2 = "dbbca ",S3 = " aadbbcbcac "。
输出:真
给你一个字符串S和一个字符规则P,请实现一个支持'.'的正则表达式匹配和“*”。
。匹配任何单个字符。
* '匹配零个或多个前面的元素。
所谓匹配就是覆盖整个字符串s,而不是字符串的一部分。
描述:
s可以是空的,只包含从a到z的小写字母。
p可以是空的,只包含从A到Z的小写字母以及字符。和*。
示例1:
输入:
s = "aa "
p = "a "
输出:假
解释:“a”无法匹配“aa”的整个字符串。
给定一个整数矩阵,求最长增量路径的长度。
对于每个单元格,您可以上下左右移动。不能对角移动,也不能越界(也就是不允许绕回)。
示例1:
输入:nums =
,
,
输出:(当然正确)
给定一些标有宽度和高度的信封,宽度和高度显示为整数对(w,h)。当另一个信封的宽度和高度大于这个信封时,这个信封就可以放进另一个信封里,就像俄罗斯娃娃一样。
请计算一下可以组成一组“俄罗斯娃娃”的信封的最大数量(即一个信封可以放在另一个信封里)。
描述:
不允许旋转信封。
示例:
输入:信封=,,,]
输出:3
说明:信封的最大数量是3,组合是:= & gt= & gt。
标准动态编程
一只青蛙想要过河。假设将河流平均分成x个单元格,每个单元格中可能有也可能没有石头。青蛙可以在岩石上跳,但是它们不能跳进水里。
给定一个石头的位置列表(以单元格编号升序表示),请决定青蛙能否成功过河(即能否跳到最后一步的最后一块石头)。一开始青蛙已经默认站在第一块石头上,可以假设第一步只能跳一个单位(也就是只能从1号单元格跳到2号单元格)。
如果青蛙上一步跳了k个单位,那么它的下一跳距离只能选k-1,k或k+1个单位。还请注意,青蛙只能向前跳(向终点方向)。
请注意:
结石数≥ 2且< 1100;
每颗宝石的位置序号是一个非负整数,它的
第一块石头的位置总是0。
示例1:
输出:3
思路是忽略第一个得到一个结果,忽略最后一个得到一个结果,只要每次有一个结果。
//可以用rangeCopy在函数中求解。
给定一个三角形,求从上到下的最小路径和。每个步骤只能移动到下一行的相邻节点。
这里的相邻节点是指下标等于或等于上节点下标+1的两个节点。
例如,给定一个三角形:
,
,
]
从上到下的最小路径和为11(即2+3+5+1 = 11)。
给定一个包含非负整数的m×n网格,请找出一条从左上角到右下角的路径,使路径上的数字之和最小。
注意:一次只能向下或向右移动一步。
示例:
输入:
,
,
]
输出:2
一个机器人位于一个m x n网格的左上角(起点在下图中标记为“start”)。
机器人一次只能向下或向右移动一步。机器人试图到达网格的右下角(下图中标有“完成”)。
有多少种不同的路径?
假设你正在爬楼梯。要走n步才能到屋顶。
一次可以爬1或者2级台阶。你有多少种不同的方法可以爬到楼顶?
注意:给定的n是正整数。
示例1:
输入:2
输出:2