- 博客(52)
- 收藏
- 关注
原创 A有 n+1 个硬币,B有 n 个硬币,A比B得到更多的正面朝上的概率是多少?
美团金融服务事业部,机器学习算法二面题目描述甲有 n+1 枚硬币,乙有 n 枚硬币,求甲掷出的正面数比乙掷出的正面数多的概率 ?那如果甲有n+2枚呢?解法一甲有 n+1 枚硬币,乙有 n 枚硬币,甲和乙各抛 n 次,甲掷出的正面数等于乙抛出正面数,要想甲比乙多,甲必须再抛出一个正面,甲抛出正面概率 P=0.5 ,所以,甲比乙多的概率0.5.当甲有n+2次,那么最后2次,至少1次正面即可,所以概…解法二设事件A:“甲抛出的正面比乙抛出的正面多”事件B:“甲抛出的反面比乙抛出的反面多”显
2020-09-28 21:42:03 4079 3
原创 【面经】美团算法二面
部门是美团服务平台-营销部门的 推荐广告算法一、项目介绍问阿里的项目问CNN的演进历史,未来的改进方向二、概率题A有n+1个硬币,B有n个硬币,A比B得到更多的正面朝上的概率是多少?
2020-09-28 18:06:27 1076
原创 【剑指offer】33. 二叉搜索树的后序遍历序列
一、题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5/ \2 6/ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000...
2020-09-28 16:49:43 491
原创 Python以一定的概率生成某个数
笔试巧用随机数一个鸡贼的技巧,注意那些输出为「二值」的题目,二值就是类似布尔值,或者 0 和 1 这种组合有限的。比如说很多题目是这样,巴拉巴拉给你说一堆条件,然后问你输入的数据能不能达成这些条件,如果能的话请输出 YES,不能的话输出 NO。如果你会做当然好,如果不会做怎么办?首先这样提交一下:print("YES")看下 case 通过率,假设是 60%,那么说明结果为 YES 有 60% 的概率,所以可以这样写代码:import randomdef number_of_certain
2020-09-26 10:28:27 3194
原创 【LeetCode】239. 滑动窗口最大值
一、题目描述给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1
2020-09-22 15:58:01 286
原创 【LeetCode】1227. 飞机座位分配概率
一、题目描述有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。剩下的乘客将会:如果他们自己的座位还空着,就坐到自己的座位上,当他们自己的座位被占用时,随机选择其他座位第 n 位乘客坐在自己的座位上的概率是多少?示例 1:输入:n = 1输出:1.00000解释:第一个人只会坐在自己的位置上。示例 2:输入: n = 2输出: 0.50000解释:在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。 提示:1 &
2020-09-22 10:56:23 799
原创 【LeetCode】458. 可怜的小猪(试毒药)
一、题目描述有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在 15 分钟内死去。问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?回答这个问题,并为下列的进阶问题编写一个通用算法。进阶:假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出 “有毒” 水桶?这 n 只水桶里有且仅有一只有毒的桶。提示:1. 可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要
2020-09-21 18:59:22 983
原创 【面试题】一个环,有n个点, 问从0点出发,经过k步回到原点有多少种方法
一、题目描述一个环,有n个点(编号 0 ~ n-1 ), 问从0点出发,经过k步回到原点(0点)有多少种方法 ?二、解题思路 & 代码再回到 0 点可以从右面回来,也可以从左面回来,即先到达旁边的一个点,看看有多少回来的方法即可。所以运用动态规划的思想,我们可以写出递推式如下: dp(k,j)=dp(k−1,j−1)+dp(k−1,j+1)dp(k, j) = dp(k-1, j-1) + dp(k-1, j+1)dp(k,j)=dp(k−1,j−1)+dp(k−1,j+1)dp(k,j)
2020-09-21 11:40:26 2043
原创 【LeetCode】209. 长度最小的子数组 & 862. 和至少为 K 的最短子数组
209. 长度最小的子数组一、题目描述给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。进阶:如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。二、解题思路 & 代码2.1 方法一:暴力法(P
2020-09-20 11:55:15 496
原创 最短路径算法之Dijkstra算法
参考:最短路径算法之Dijkstra算法漫画:图的 “最短路径” 问题python如何实现Dijkstra算法–最短路径问题
2020-09-18 19:48:23 410
原创 AttributeError: ‘dict_keys‘ object has no attribute ‘remove‘
dic1 = {'a':1, 'b':2, 'c':3}# keys = list(dic1)keys = dic1.keys()keys.remove('b')print(keys)报错AttributeError: 'dict_keys' object has no attribute 'remove'改为如下即可:dic1 = {'a':1, 'b':2, 'c':3}keys = list(dic1)# keys = dic1.keys()keys.remove('b')
2020-09-18 19:38:41 2882 4
原创 【LeetCode】42. 接雨水
42. 接雨水(二维)一、题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6二、解题思路 & 代码2.1 按列求求每一列的水,我们只需要关注当前列,以及左边最高的墙,右边最高的墙就够了。装水的多少,当然根据木
2020-09-18 11:27:47 673 1
原创 【LeetCode】58. 最后一个单词的长度
一、题目描述给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: "Hello World"输出: 5二、解题思路 & 代码由于要获取最后一个单词的长度,需要从尾开始遍历。但是结尾处还可能有空格所以一般的解题思路为,先去掉末尾的空格,然后从尾向前开始遍历,直到遇到第一个
2020-09-18 10:06:57 246
原创 【LeetCode】125. 验证回文串
一、题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false二、解题思路 & 代码2.1 直接取反比较class Solution: def isPalindrome(self, s: str) -> bool:
2020-09-17 22:04:46 177
原创 面试常问智力题
目录1. 赛马次数2. 用绳子计时 15 分钟3. 九球称重4. 药丸称重5. 得到 4 升的水6. 扔鸡蛋7. 砝码秤盐参考:1. 赛马次数有 25 匹马和 5 条赛道,赛马过程无法进行计时,只能知道相对快慢。问最少需要几场赛马可以知道前 3 名。先把 25 匹马分成 5 组,进行 5 场赛马,得到每组的排名。再将每组的第 1 名选出,进行 1 场赛马,按照这场的排名将 5 组先后标为 A、B、C、D、E。可以知道,A 组的第 1 名就是所有 25 匹马的第 1 名。而第 2、3 名只可能
2020-09-17 16:31:11 1563
原创 【LeetCode】680. 验证回文字符串 Ⅱ &变形
一、题目描述给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。二、解题思路 & 代码双指针 + 贪心算法class Solution: def validPalindrome(self, s: str) -> bool: def ch
2020-09-13 16:56:26 275
原创 【剑指offer】剑指 Offer 54. 二叉搜索树的第k大节点
一、题目描述给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4限制:1 ≤ k ≤ 二叉搜索树元素个数二、解题思路 & 代码解法基于
2020-09-12 16:51:47 334
原创 【LeetCode】328. 奇偶链表
一、题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6
2020-09-12 16:36:27 226
原创 【LeetCode】498. 对角线遍历 & 1424. 对角线遍历 II
I、498. 对角线遍历(蛇形)一、题目描述给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。示例:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]解释:说明:给定矩阵中的元素总数不会超过 100000 。二、解题思路 & 代码2.1 对角线迭代和翻转算法初始化数组 result,用于存储最后结果。
2020-09-12 15:08:26 471
原创 Python中append和extend的区别
list.append(object) 向列表中添加一个 对象objectlist.extend(sequence) 把一个 序列seq 的内容添加到列表中1. appendlist_1 = ['a', 'b']list_2 = ['c', 'd']list_1.append(list_2)print(list_1)输出:['a', 'b', ['c', 'd']]使用 append 的时候,是将 list_2 看作一个对象,整体打包添加到list_1对象中。2. entend.
2020-09-12 14:39:00 118
原创 最长的公共连续子串
一、题目描述两个字符串(可能包含空格),找出其中最长的公共连续子串, 并输出其长度。二、解题思路 & 代码创建一个二维数组 dp[n][m]dp[n][m]dp[n][m],其中 dp[i][j]dp[i][j]dp[i][j] : 表示取到 s1[i]s1[i]s1[i] 和取到 s2[j]s2[j]s2[j] 时的最大连续子串长度。如果 s1[i]s1[i]s1[i] 等于 s2[j]s2[j]s2[j],则 dp[i][j]dp[i][j]dp[i][j] 等于取到 s1[i−1]s
2020-09-08 20:30:38 653
原创 删除最小字母(第四范式算法一面)
一、题目描述给定一个长度为n的小写字符数组,一次操作是删除一个最小字母,如有多个删除最靠左的。要求输出操作k次后的字符串。输入:abcdabcd k = 3输出:cdbcd 二、解题思路 & 代码由于都是小写字母,字符类型比较简单,故而可以用简便的方法采用哈希表将字符串进行计数将键值从小到大排序,而后从前往后删除,当删除的数量 == k 时停止from collections import Counterdef delMinAlpha(s, k): n = le
2020-09-07 17:11:46 651
原创 创建二维数组 以及 python中[0 ]* n与[0 for _ in range(n)]的区别与联系
一、浅拷贝于深拷贝关于浅拷贝于深拷贝:Python 的深拷贝和浅拷贝直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 ======================================================二、区别[ 0 ] * n 是浅拷贝, 也就是把一个列表重复了 n 次,是 = 号复制(注意不是浅拷贝,= 与浅
2020-09-07 15:55:57 14511 1
原创 【leetCode】31. 下一个排列
一、题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1二、解题思路 & 代码一遍扫描什么样子的重新排列将产生下一个更大的数字呢?我们想要创建比当前更大的排列。因此,我们需要将数字 a[i−1]a[i
2020-09-07 12:23:35 277
原创 【LeetCode】32. 最长有效括号
一、题目描述给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"二、解题思路 & 代码2.1 动态规划dp[i]dp[i]dp[i] 表示以 iii 结尾的最长有效括号;当 s[i]s[i]s[i] 为 (,dp[i]dp[i]dp[i] 必然等于 000,因为不可能组成有效的括号
2020-09-07 11:20:08 367 1
原创 寻找迷宫中的最短路径
一、题目描述给定一个 n*m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中0表示可以走的路,1表示不可通过的墙壁。最初,有一个人位于 start 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至 end 处,至少需要移动多少次。数据保证 start 处和 end 处的数字为0,且至少存在一条通路。输入格式第一行包含两个整数n和m。接下来n行,每行包含m个整数(0或1),表示完整的二维数组迷宫。输出格式输出一个整数,表示从左上角移动至
2020-09-06 18:15:35 1392 1
原创 【LeetCode】460. LFU缓存
一、题目描述请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除最久未使用的键。「项的使用次数」就是自插入该项以来对其调用 get 和 put
2020-09-05 21:52:08 220
原创 【剑指offer】61. 扑克牌中的顺子
一、题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True 限制:数组长度为 5 数组的数取值为 [0, 13] .二、解题思路 & 代码此 555 张牌是顺子的 充分条件 如下:除大小王外,所有牌 无重复 ;设此
2020-09-05 12:23:04 289
原创 Python 的深拷贝和浅拷贝
直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。列表拷贝示例说明:import copya = [1,2,3,[4,5,6]]b = a # 浅拷贝: 引用对象c = a.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用d = copy.deepcopy.
2020-09-05 11:41:04 1209
原创 【LeetCode】93. 复原IP地址
一、题目描述给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。示例 1:输入:s = "25525511135"输出:["255.255.11.1
2020-09-05 11:06:42 288
原创 【LeetCode】101. 对称二叉树
一、题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 进阶:你可以运用递归和迭代两种方法解决这个问题吗?二、解题思路 & 代码2.1 递归# Definition for a binar
2020-09-05 10:55:46 225
原创 【LeetCode】263.丑数 & 264. 丑数 II
I. 263. 丑数(是否为丑数)一、题目描述编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例 1:输入: 6输出: true解释: 6 = 2 × 3示例 2:输入: 8输出: true解释: 8 = 2 × 2 × 2示例 3:输入: 14输出: false 解释: 14 不是丑数,因为它包含了另外一个质因数 7。说明:1 是丑数。输入不会超过 32 位有符号整数的范围: [−231,231−1][−2^{31}, 2
2020-09-04 16:16:11 363
原创 标准化和归一化 超全详解
一、标准化 / 归一化定义归一化和标准化经常被搞混,程度还比较严重,非常干扰大家的理解。为了方便后续的讨论,必须先明确二者的定义。首先定义常见的结构化数据表格,第一行的表头是表示各种特征,而后每一列表示某种特征的所有数值。无论标准化还是归一化都是针对某个特征(某一列)进行操作的。1. 归一化就是将训练集中某一列数值特征(假设是第 iii 列)的值缩放到0和1之间。方法如下所示:xi−min(xi)max(xi)−min(xi)\frac{x_{i}-\min \left(x_{i}\rig
2020-09-03 21:48:21 21889 3
原创 【面经】第四范式机器学习算法 一面
一、项目介绍比较常规,没有挖很深二、手撕代码【LeetCode】215. 数组中的第K个最大元素(高频!字节面试题)&变形(列表是单峰)【LeetCode】39. 组合总和 & 40. 组合总数 II & 216. 组合总和 III & 1~n 这n个数组合成 m...
2020-09-03 17:15:24 1043
原创 【面经】360算法一面
一、项目介绍PPO 的 p 和 q 分布如何控制KL 散度强化学习如何在广告推荐上使用,如何提高实时性RNN 中的 Attention随机森林(决策树)、GBDT、LR 的特征是否需要归一化二、手撕代码【LeetCode】112. 路径总和(二叉树是否存在和为 target的路径) & 113. 路径总和 II(找到所有满足的路径)& 437. 路径总和 III...
2020-09-03 11:27:49 508
原创 【LeetCode】78. 子集 & 90. 子集 II
78. 子集一、题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]二、解题思路 & 代码2.1 迭代class Solution: def subsets(self, nums: List[int]) -> List[Li
2020-09-03 00:24:11 279
原创 RF、GBDT、XGBoost 面试笔记
由于本文是基于面试整理,因此不会过多的关注公式和推导,如果希望详细了解算法内容,敬请期待后文。 RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。 根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:Boosting:个体学习器之间存在强依赖关系、必须串行生成的序列化方法,Bagging和“随机森林”(Random Forest):个体学习器间不存在强依赖关系、可同
2020-09-03 00:23:05 1614
原创 【LeetCode】311. 稀疏矩阵的乘法
本题是 LeetCode 会员才能看…一、题目描述给你两个 稀疏矩阵 A 和 B,请你返回 AB 的结果。你可以默认 A 的列数等于 B 的行数。请仔细阅读下面的示例。示例:输入:A = [ [ 1, 0, 0], [-1, 0, 3]]B = [ [ 7, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 1 ]]输出: | 1 0 0 | | 7 0 0 | | 7 0 0 |AB = | -1 0 3 | x | 0 0 0 |
2020-09-03 00:22:21 622
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人