阿里面试算法题合集一

0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

示例 1:

输入: n = 5, m = 3
输出: 3
示例 2:

输入: n = 10, m = 17
输出: 2

请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数,求任意第n位对应的数字。

示例 1:

输入:n = 3
输出:3
示例 2:

输入:n = 11
输出:0

注意这里必须是long 类型

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

示例 1:

输入: [10,2]
输出: "102"
示例 2:

输入: [3,30,34,5,9]
输出: "3033459"

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

你需要按照以下要求,帮助老师给这些孩子分发糖果:

每个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?

示例 1:

输入: [1,0,2]
输出: 5
解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。
示例 2:

输入: [1,2,2]
输出: 4
解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。
第三个孩子只得到 1 颗糖果,这已满足上述两个条件。

在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

说明:

如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
示例 1:

输入:
gas = [1,2,3,4,5]
cost = [3,4,5,1,2]

输出: 3

贪心的思路是,只要总和大于0 就可以绕一圈,
开始位置的贪心思路是,如果从刚开始sum小于0,一定不是从之前开始,而是从当前下一个位置,sum = 0 清空

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

一条包含字母 A-Z 的消息通过以下方式进行了编码:

'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。

这里一定注意 第一个数为0 的情况,s.charAt(0) == '0' 第一个为0 要直接返回0 才行

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

注意:你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

说明:

s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
示例 1:

输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。

给定一个整数矩阵,找出最长递增路径的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。

示例 1:

输入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
输出: 4
解释: 最长递增路径为 [1, 2, 6, 9]。

使用带记忆的可以避免超时

使用动态规划解题

给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0。

如果有多个目标子集,返回其中任何一个均可。

示例 1:

输入: [1,2,3]
输出: [1,2] (当然, [1,3] 也正确)

给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。

请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。

说明:
不允许旋转信封。

示例:

输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
输出: 3
解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。

标准的动态规划

一只青蛙想要过河。 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。

给定石子的位置列表(用单元格序号升序表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一个石子上)。 开始时, 青蛙默认已站在第一个石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格1跳至单元格2)。

如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1个单位。 另请注意,青蛙只能向前方(终点的方向)跳跃。

请注意:

石子的数量 ≥ 2 且 < 1100;
每一个石子的位置序号都是一个非负整数,且其 < 231;
第一个石子的位置永远是0。
示例 1:

[0,1,3,5,6,8,12,17]

true

使用数组+ 链表枚举所有的可能

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

插入一个字符
删除一个字符
替换一个字符

示例 1:

输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

示例 1:

输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:

输入: coins = [2], amount = 3
输出: -1

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。

一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)

题目数据保证答案符合 32 位带符号整数范围。

示例 1:

输入:S = "rabbbit", T = "rabbit"
输出:3

给定一个无序的整数数组,找到其中最长上升子序列的长度。

示例:

输入: [10,9,2,5,3,7,101,18]
输出: 4

使用二分查询

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

示例 1:

输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入:[1,2,3,1]
输出:4

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

输入: [2,3,2]
输出: 3

思路是忽略第一个求一个结果,忽略最后一个求一个结果,只要一个时一个结果

// 可以使用rangeCopy 将其放入一个函数中求解

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。

例如,给定三角形:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

示例 1:

输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2

  • Android澶у巶闈㈣瘯缁忛獙鍒嗕韩(OPPO,瀛楄妭,鍗庝负,闃块噷)
    绛旓細7.26 绠楁硶璁捐 鍏佹柊鎶鏈瘒 8.1 瀹炴垬闂绡 涔濄侀潰璇曠瘒 9.1 寮婧愭枃妗 9.2 闈㈣瘯鏂囩尞 浠ヤ笂灏辨槸鎴戠殑瀛︿範鍜岄潰璇曠Н绱紝鏈夎嚜宸遍潰璇曠粡鍘嗚繃鐨勶紝涔熸湁鏁寸悊鐨勪竴浜涘ぇ鍘闈㈣瘯棰锛岀瘒骞呮湁闄愶紝鍏蜂綋鍐呭灏变笉灞曠ず浜嗭紝鎴戝凡缁忔暣鐞嗘垚鏂囨。浜嗐傝繕鏄紑澶磋鐨勶紝浠呴潬闈㈣瘯鏈熼棿涓存椂鎶变經鑴氬拰鍒烽瀵硅嚜韬彂灞曚笉鏄暱涔呬箣璁★紝鍋氬ソ...
  • 鏁板鑴戠瓔鎬ヨ浆寮強绛旀涓夊垎閽熶互涓,浜斿垎閽熶互涓嬨
    绛旓細9.涓鎵撻浮铔嬫槸鍗佷釜,楦¤泲涓鎵撴槸鍑犱釜?绛旀:0涓,鍥犱负鎵撶浜 10.涓涓汉鑺8鍧楅挶涔颁簡涓鍙浮锛9鍧楅挶鍗栨帀浜嗭紝鐒跺悗浠栬寰椾笉鍒掔畻锛岃姳10鍧楅挶鍙堜拱鍥炴潵浜嗭紝11鍧楅挶涔扮粰鍙﹀涓涓紝闂粬璧氫簡澶氬皯?杩欐槸涓闈㈣瘯棰:鏈変笁绉绠楁硶锛1.鏈鍒濆彧鏈8鍧楅挶锛屾渶鍚庝綘鏈11鍧椾簡锛屾墍浠ユ槸璧3鍧;2.绗竴娆′拱鍗栵紝涓讳汉鍏崯澶8鍧...
  • 绠楁硶闂...绠楁硶楂樻墜璇疯繘
    绛旓細2^6 < 100 < 2^7 ,鏁呴渶瑕佷竷娆°傝瘉鏄庯細浠50灞傛憯涓嬶紝...1 鑻ヤ笉纰庯紝鍐嶄粠50+锛100-50锛/2 = 75灞傛憯涓嬶紝...2 鑻ヤ笉纰庯紝鍐嶄粠75+锛100-74锛/2=88灞傛憯涓嬶紝锛堝洜涓87.5涓嶆槸鏁存暟锛...3 鑻ヤ笉纰庯紝鍐嶄粠88+锛100-88锛/2=94灞傛憯涓嬶紝...4 鑻ヤ笉纰庯紝鍐嶄粠94+锛100-94锛/2=97灞傛憯涓...
  • 2019骞闃块噷宸村反鐨勪笁娆闈㈣瘯缁忛獙
    绛旓細骞镐簭闃块噷妫鏌ヤ簡韬唤璇!鎵嶅彂鐜板繕鍦ㄤ簡鑰冨満銆傘傛暣涓瑪璇曟湁浜涘績涓嶅湪鐒夛紝涓嶈繃鐜板湪鎯虫兂锛屾湁浜涗笉浼氱殑棰樺氨绠楁椂闂村浜嗚繕鏄兂涓嶅嚭鏉ワ紝浼氱殑棰樿嚜鐒跺緢蹇氨鍐欏嚭鏉ヤ簡銆傞涓嶇畻澶毦锛岃偗瀹氳繕鏄秹鍙婃搷浣滅郴缁燂紝鏁版嵁搴擄紝绠楁硶锛岀綉缁滅瓑鐭ヨ瘑锛屼笉绠楀お娣便傚拰涔嬪墠绗旇瘯鍏朵粬鍏徃涓嶄竴鏍风殑鍦版柟鏄湁鐐瑰儚鏁板棰樼殑鎰熻锛屽ぇ棰樺彧鏈夋渶鍚庝竴...
  • 瀛楄妭31鍑犺疆鎶鏈潰
    绛旓細3.浣犺繖涓婇潰鍐欎綘鍙互鐔熺粌浣跨敤spring杩涜寮鍙戯紝璁茶鎬庝箞鐢╯pring鍚с傚晩杩欙紝鎴戝ソ鍍忔病鍐欐垜鐔熺粌浣跨敤spring杩涜寮鍙戝晩锛闈㈣瘯瀹樻棤涓敓鏈夊晩锛侊紒锛4.涓鍫嗘暟鎹簱鐩稿叧鐨勯棶棰 5.璁茶浜嗚В鐨勮璁℃ā寮忥紝鎵嬪啓鍙屾牎楠屽疄鐜扮殑鍗曚緥 6.璁捐涓涓喘鐗╄溅锛閲岄潰鐨勫晢鍝佹湁涓嶅悓鐨勬墦鎶樼瓥鐣ワ紝璁$畻鍑烘讳环鏍硷紝鍐欏嚭鏉ヤ唬鐮 7.绠楁硶棰锛...
  • 鍗侀潰闃块噷,涓冮潰澶存潯,鍏釜Offer,鏄ユ嫑缁撴潫
    绛旓細鍦ㄨ吘璁紝鎴戜綋楠屼簡鏀粯绯荤粺銆佷簨鍔$鐞嗗拰鏁版嵁搴撲紭鍖栫殑瀹炴垬鑰冮獙锛屼互鍙婂绠楁硶鍜屼汉鎵嶅煿鍏荤殑娣卞叆鐞嗚В銆備簩闈腑锛屾垜鍒嗕韩浜嗗叧浜庣嚎绋嬫睜銆丼pring IOC鍜孊ean鐢熷懡鍛ㄦ湡鐨勫疄璺电粡楠岋紝鍚屾椂HR闈㈣瘯鍒欒仛鐒︿簬涓汉鍏磋叮鍜岃亴涓氳鍒掋傛姈闊充竴闈㈢殑鎸戞垬鍖呮嫭鎵嬫挄LFU绠楁硶鍜屽鏉傞棶棰樿В鍐筹紝鑰屾晥鐜囧伐绋嬬殑闈㈣瘯鍒欐繁鍏ユ帰璁ㄤ簡鎬ц兘浼樺寲鍜岀綉缁滃崗璁傛瘡...
  • 濡備綍闈㈣瘯c++宸ョ▼甯?
    绛旓細3,濡傛灉缁檕浣犱竴涓綉鏄撴父鎴忕殑offer鍜闃块噷鐨刼ffer锛屼綘閫夊摢涓紵杩欓棶棰橀棶鐨勫彲浠ャ傘傘4杩橀棶浜嗛亾绠楁硶棰锛屽叿浣撳繕浜嗭紝鏈夌偣闅 闈㈠唴瀹癸細 涓夐潰鏃闈㈣瘯瀹樼殑妗屽瓙涓婂啓鐫绠楁硶宸ョ▼甯堬紝褰撴椂鐩存帴鍚撳翱锛岀畻娉曡挓钂昏〃绀哄帇鍔涘北澶э紝缁撴灉鍑轰簡2閬撴櫤鍔涢銆傘傘1, 缁欎綘2k+1涓繛缁牸瀛愶紝2浜轰笅妫嬶紝瑙勫垯鏄紝褰撲竴涓汉鍦ㄦ煇涓牸瀛...
  • 濡傛灉鍦闃块噷宸村反闈㈣瘯瀹,璺熼┈浜戝湪鐢垫30绉,浣犱細璇翠粈涔?
    绛旓細绉戞妧姘告棤姝㈠锛屼粖澶╀笟鍐呭張鍙戠敓浜嗕粈涔堬紵骞垮ぇ缃戝弸瀵规鎬庝箞鐪嬶紵涓嬮潰璺熷皬缂栦竴璧峰洿瑙備笅鍚勫ぇ缃戝弸瀵逛粖澶╃儹璁瘽棰樼殑璇勮鍚э紒浠婂ぉ璺熷ぇ瀹跺垎浜殑璇濋鏄愬幓闃块噷宸村反闈㈣瘯锛屽湪鐢垫閬囪椹簯锛屾湁20绉掔殑鏃堕棿浣犱細璇翠粈涔堬紵銆戯紝鏂伴椈涓缁忕垎鍑猴紝灏卞紩鏉ュ悇鐣屽洿瑙傦紝鍒嗗垎閽熶笂浜嗙儹闂ㄥご鏉°備竴鏃朵箣闂村瀹跺獟浣撶悍绾峰彂琛ㄣ佽浆杞斤紝濡傜綉鏄撱...
  • 鎴戠殑闃块噷绉嬫嫑涔嬭矾
    绛旓細鍦2017骞寸殑鐮斾笁鏃舵湡锛屾垜鎬鎻g潃瀵规妧鏈殑鐙傜儹锛屽紑鍚簡涓鍦哄鎵炬ⅵ鎯崇殑鏃呯▼銆傞偅鏃讹紝鎴戠瀯鍑嗕簡闃块噷宸村反锛屽喅蹇冮氳繃鐮旇JDK婧愮爜鎻愬崌鑷垜锛屼负鏄ユ嫑鐨勫疄涔闈㈣瘯鍋氳冻鍑嗗銆傜粡杩囦簲娆¢潰璇曠殑娲楃ぜ锛屾垜鎴愬姛鑾峰緱浜嗛樋閲屽叕鍙哥殑瀹炰範offer锛岃繖鏍囧織鐫鎴戞牎鍥敓娲荤殑宕柊绡囩珷姝e紡寮鍚傞樋閲岃嚜鐮斾竴浠ユ潵灏辨槸鎴戠殑姊︽兂鑸炲彴锛屾垜閫氳繃椤圭洰瀹炶返...
  • 鍏ㄥ涓轰粈涔堝彧鏈夋垜璇诲埌浜嗗崥澹
    绛旓細鍙戦001 鑾峰彇闃块噷澶хLeetCode 鍒烽绗旇 鍙戦002 鑾峰彇鑾峰彇璋锋瓕鍏徃缂栫▼浠g爜瑙勮寖 鍙戦003 鑾峰彇10涓簿缇庣畝鍘嗘ā鏉縋DF鍜學ord鐗 鍙戦004 鑾峰彇100閬撶簿閫 C++ 闈㈣瘯棰鍜岀瓟妗坵ord鐗 鍙戦005 鑾峰彇鑾峰彇璋锋瓕LeetCode绠楁硶绗旇 鐪嬪埌涓绡 涓涓啘鏉戝崥澹殑鐙櫧:鍏ㄥ涓轰粈涔堝彧鏈夋垜璇诲埌浜嗗崥澹 銆 鎰熻Е寰堟繁鍒,鍒嗕韩缁欏ぇ瀹,鍏卞媺銆
  • 扩展阅读:阿里面试题逻辑 ... 3d100%必出和值的方法 ... 阿里大数据面试题 ... 阿里面试结果查询系统 ... 3d计算准确99%的方法 ... 阿里面试题库 ... 和值推算法 ... 最准3d和值必出技巧 ... 面试50道刁钻题 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网