大家好,今天来为大家分享阿里面试算法题合集一的一些知识点,和阿里算法平台起名的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
本文目录
阿里面试算法题合集一阿里开源新一代 AI 算法模型,由达摩院90后科学家研发阿里面试算法题合集一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
阿里开源新一代 AI 算法模型,由达摩院90后科学家研发近日,阿里 AI开源了新一代人机对话模型 ESIM。该算法模型提出两年多,已被包括谷歌、facebook在内的国际学术界在200多篇论文中引用,更曾在国际顶级对话系统评测大赛(DSTC7)上获得双料冠军,将人机对话准确率的世界纪录提升至94.1%。
ESIM模型最初由达摩院语音实验室内的90后科学家陈谦研发,现在已经成为业界的热门模型和通用标准。这支平均年龄30岁的研发团队宣布,即日起向全世界企业与个人开源ESIM模型,与全球开发者共享这一成果,共同推进人工智能技术发展。
在去年 DSTC 7大赛上,ESIM横扫 NOESIS赛道,从麻省理工学院、约翰霍普金斯大学、IBM研究院等近20支参赛队伍中脱颖而出,拿下该赛道两项比赛的冠军。
DSTC是学术界权威对话系统评测大赛,由微软研究院、卡耐基梅隆大学的科学家在2013年发起,今年举办到了第八届。NOESIS赛道考察AI的人机对话能力,要求 AI根据给定的多轮人机对话历史,从成百到上万个句子中选出正确的回复。
人机对话系统及其背后的认知智能,是人机交互中最复杂也最重要的技术,曾被比尔盖茨形容为“人工智能皇冠上的明珠”。为让机器快速准确理解人类的表达,ESIM给 AI装上一套“雷达”系统,赋予它实时检索对话历史、自动去除干扰信息的能力,使它能够给出人类期待的回复。
这项突破将给智能客服、导航软件、智能音箱等应用场景带去显著变化,阿里基于 ESIM模型研发的智能语音点餐机、地铁语音售票机等应用已在杭州、上海等地落地。
这不是阿里第一次开源前沿技术。2018年达摩院开源了新一代语音识别模型DFSMN,吸引众多研究者在该模型基础上开展工作,甚至再度刷新语音识别世界纪录。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!