- 博客(74)
- 收藏
- 关注
原创 香港大学HKU MDASC 面经笔经 (21 spring)
笔试总共有 10 道英文选择题,一道 python 编程题目。统计与数理统计(占半数以上题目)当时在网络上所有复习资料的时候无意中发现了 MIT 的复习资料:MIT 复习资料。总体来说非常有帮助。我做了其中的 Exam 1 Practice Questions I (边看答案边做,用于复习回顾),Exam1 Practice Questions II (不看答案直接做,检验效果), Exam 2 Practice Questions (第二部分、第三部分), Final Exam Pr.
2021-03-24 15:48:56 2925
原创 DBSCAN 密度聚类
DBSCAN 密度聚类算法:具体数学解释及算法见DBSCAN 密度聚类算法, 本文主要进行实践。背景:对于金融机构或者电商来说,常常面临团伙套现问题。具体来说,欺诈团伙在电商利用无息(或低息)购物贷款大量购买商品,并在其他平台出售从而完成套现。对于金融机构来说,此类行为占用了大量的资金。DBSCAN 的特性及适合性DBSCAN 可以对任意形状的稠密数据集进行聚类(凸和非凸均可),套现团伙在地理位置上常常表现为非凸(现实社区形状不规则,可能出现互相嵌套的情况)。 DBSCAN 不需要事.
2021-01-19 11:57:10 557
原创 Leetcode: 200. 岛屿数量
题目给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出:1示例2:输入:[['1','1','0','0','...
2020-07-14 16:35:43 280
原创 Leetcode: 35. 搜索插入位置
题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0分析比较标准的二分查找题目。用二分查找的语言描述:找到第一个大于等于 target 所在的位置。.
2020-07-06 16:26:11 213
原创 Leetcode: 33. 搜索旋转排序数组
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例2:输入: nums = [4,5,6,7,0,1,2...
2020-07-06 15:50:12 154
原创 Leetcode: 215. 数组中的第 k 个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。分析该题目利用三路快速排序中的 partition 函数进行快速选择。首先看一下 partition 函数:private i.
2020-07-04 17:53:18 232
原创 Leetcode: 75. 颜色分类
题目给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用常..
2020-07-04 11:45:32 163
原创 Leetcode: 1498. 满足条件的子序列数目
题目给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。示例 1:输入:nums = [3,5,6,7], target = 9输出:4解释:有 4 个子序列满足该条件。[3] -> 最小元素 + 最大元素 <= target (3 + 3 <= 9)[3,5] -> (3 + 5
2020-06-30 11:05:33 655
原创 Leetcode: 1497. 检查数组对是否可以被 k 整除
题目给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n /2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例 1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例 2:输入:arr = [1,2,3,4,5,6], k =.
2020-06-29 17:02:14 302
原创 Leetcode: 1496. 判断路径是否相交
题目给你一个字符串 path,其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W',分别表示向北、向南、向东、向西移动一个单位。机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。示例 1:输入:path = "NES"输出:false解释:该路径没有在任何位置相交。示例 2:输入:path = "NESWW".
2020-06-29 16:19:55 365
原创 Leetcode: 47. 全排列II
题目给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]分析该题目和全排列I的差别在于:本题目可以包含重复的数字,并且要求返回所有不重复的全排列。按照常规的思路,我们画出深度优先搜索树,并确定路径和可选列表。如 nums = [1, 2, 2], 它的深度优先搜索树如下:最关键的是去重操作:for (int i = 0; i < candidate...
2020-06-27 15:53:43 113
原创 Leetcode: 90. 子集II
题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]分析与子集I的区别在于 nums 包含了重复的元素。那么只需要先将 nums 进行排序(将重复的值集中到一起),然后再填加额外一行代码去重就可以了。如上图,nums = [1, 2, 2], 为两个2加标记,用于区分。...
2020-06-27 10:50:19 143
原创 Leetcode: 78. 子集I
题目给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]分析子集是回溯法的另一类经典题目,解决方法还是画出深度优先搜索树,找到路径和可选列表,与全排列不同的点有两个:一是集合是无序的,二是树中每一个结点都应该直接加入答案集。可以发现,在同一...
2020-06-27 09:29:48 175
原创 Leetcode: 46. 全排列I
题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]分析这是回溯法中全排列题型中最基本的一道题,画出深度优先搜索树,然后找到路径和可选列表。只要使用代码将上图模拟出来即可。代码class Solution { public List<List<Integer>>...
2020-06-26 17:25:35 157
原创 Leetcode 刷题模板总结
回溯法:回溯法是一种特殊的深度优先搜索算法(DFS), 做该类题目的要点在于画出深度优先搜索树,然后确定相应的路径和可选列表。模板:List<.> res = new ArrayList<>();public void backtrack(路径, 可选列表) { if (满足结束条件) { 加入 res; return; } for (选择 : 选择列表) { 做出选择; back
2020-06-26 16:53:54 969
原创 Leetcode 22: 括号生成
题目数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]分析该题目也是利用回溯法的经典题目,与电话号码的字母组合十分类似,重要的是画出深度优先搜索树,并找到路径和可选列表。用 left, right 表示可选列表,sb 记录当前...
2020-06-26 15:48:53 283 2
原创 Leetcode: 17. 电话号码的字母组合
题目给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。分析对于这类利用回溯法的题目,最重要的是将深度优先搜索树画出来,并找出路径和可选列表。然后,我们只要用代码模拟出深度优先搜..
2020-06-26 12:58:27 371
原创 Leetcode:334. 递增的三元子序列
题目给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的i, j, k,且满足0 ≤ i < j < k ≤ n-1,使得arr[i] < arr[j] < arr[k] ,返回 true ;否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入: [1,2,3,4,5]输出: true示例 2:输入: [5,4,3,2,1]输出: fa...
2020-06-25 10:57:25 157
原创 Leetcode: 16. 最接近的三数之和
题目给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3<= nums[i]<= 10^3-10^4...
2020-06-25 10:41:05 153
原创 Leetcode: 15. 三数之和
题目给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]分析暴力法的时间复杂度是O(n^3)。可以先固定一个值,然后寻找后两个值时可采取双指针的方法,将总的时间复杂度优化...
2020-06-25 10:35:52 7163 11
原创 Leetcode: 3. 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。分析符合滑动窗口类题目的特点:在数组中寻找一个范围,使得其值满足一...
2020-06-24 12:24:19 117
原创 Leetcode: 73. 矩阵置零
题目给定一个m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]进阶:一...
2020-06-24 10:32:54 100
原创 Leetcode: 43. 字符串相乘
题目给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。num1 和num2 只包含数字0-9。num1 和num2均不以零开头,除非是数字 0 本身。不能使用任何标准库的大...
2020-06-18 11:34:57 120
原创 操作系统:进程与线程
1. 进程与线程的区别调度:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统资源分配的基本单位。线程是一个基本的 CPU执行单元,线程是独立调度的基本单位。 拥有资源:进程拥有系统资源,线程几乎不拥有系统资源,但线程可以访问其隶属进程的系统资源。 系统开销: 进程开销大:进程创建、撤销(系统需要分配、回收资源,如: 内存空间、I/O 设备);进程切换(当前 CPU 环境的保存及新 CPU 环境的设置) 线程开销小:线程切换(保存设置少量寄存器内
2020-06-17 23:10:29 134
原创 1483. 树节点的第 K 个祖先
题目给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。请你设计并实现 getKthAncestor(int node, int k) 函数,函数返回节点 node 的第 k 个祖先节点。如果不存在这样的祖先节点,返回 -1 。树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。示例:输入:["TreeAncestor","getKthAncestor","
2020-06-17 09:40:58 582
原创 操作系统:中断和异常
1. 什么是中断、异常?中断:也称为外中断,指来自 CPU 执行指令以外的事件的发生,与当前执行的程序无关。如设备发出的 I/O 中断信号;时钟中断,表示一个固定的时间片已到;人工干预。 异常:也称为内中断,例外或陷入(Trap)。指源自 CPU 执行指令内部的事件。主要分为自愿中断,也就是指令中断,如系统调用时使用的访管指令(又称为陷入指令);强迫中断,包括硬件故障(如缺页) 和软件中断 (如整数除零)。2. 为什么要引入中断机制?在操作系统引入核心态和用户态后,需要引入相应的机制完成二者之间
2020-06-16 22:17:39 577
原创 操作系统:内核
1. 什么是操作系统内核?内核是计算机配置上的底层软件,是计算机功能的延伸。主要包含了与硬件关系紧密的模块,如时钟管理、中断处理、设备驱动等(处于最底层),以及运行频率较高的程序,如进行管理、存储器管理和设备管理等。2. 操作系统内核的主要组成?时钟管理:计时功能。进一步的,实现进程的切换。(如,分时操作系统中,采用时间片轮转调度的实现;实时操作系统中,按截止时间控制运行的实现;在批处理系统中,通过时钟管理来衡量一个作业的运行程度) 中断机制:仅有少部分功能属于内核。(保护、恢复中断现场的信息
2020-06-16 21:59:05 1616
原创 操作系统:核心态与用户态
1. 什么是核心态(管态)与用户态(目态)?操作系统为 CPU 划分了两种状态,核心态和用户态。核心态: 运行操作系统内核程序。 用户态:运行用户自编程序或者外层应用程序。2. 为什么要划分为核心态和用户态?因为操作系统内核程序需要执行一些特权指令,而外层应用程序处于安全考虑不能执行这些指令。Note: 指令划分特权指令:只能由操作系统使用,用户不能使用的指令。如:启动 I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机 非特权指令:用户可以使用的指令。如 控制转移
2020-06-16 21:36:24 5027 1
原创 Leetcode: 1478. 安排邮桶
题目给你一个房屋数组houses和一个整数k,其中houses[i]是第 i栋房子在一条街上的位置,现需要在这条街上安排 k个邮筒。请你返回每栋房子与离它最近的邮筒之间的距离的 最小 总和。答案保证在 32 位有符号整数范围以内。示例 1:输入:houses = [1,4,8,10,20], k = 3输出:5解释:将邮筒分别安放在位置 3, 9 和 20 处。每个房子到最近邮筒的距离和为 |3-1| + |4-3| + |9-8| + |10-9| + |20...
2020-06-16 15:07:38 533
原创 Leetcode: 1482. 制作 m 束花所需要的最少天数
题目给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输入:bloomDay = [1,10,3,10,2], m = 3, k = 1输出:3解释:让我们一起观察这三天的花开过程,x 表示花开,而.
2020-06-16 09:33:00 334
原创 Leetcode: 1481. 不同整数的最少数目
题目给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。示例 1:输入:arr = [5,5,4], k = 1输出:1解释:移除 1 个 4 ,数组中只剩下 5 一种整数。示例 2:输入:arr = [4,3,1,1,3,3,2], k = 3输出:2解释:先移除 4、2 ,然后再移除两个 1 中的任意 1 个或者三个 3 中的任意 1 个,最后剩下 1 和 3 两种整数。提示:1 <= arr..
2020-06-15 23:01:16 332
原创 Leetcode: 1477. 找两个和为目标值且不重叠的子数组
题目:给你一个整数数组arr 和一个整数值target。请你在 arr中找 两个互不重叠的子数组且它们的和都等于target。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。请返回满足要求的最小长度和,如果无法找到这样的两个子数组,请返回 -1。实例:输入:arr = [3,2,2,4,3], target = 3输出:2解释:只有两个子数组和为 3 ([3] 和 [3])。它们的长度和为 2 。...
2020-06-15 11:27:19 779
原创 剑指offer: 数据流中的中位数
题目:如何得到数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序后的中间的数值,如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后两个数的平均值。pop_heap、push_heap分析: 1. 数组是最简单的数据容器,如果数组没有排序,可以使用partition函数 找到数组的中位数。在没有排序的数组中插入和找到一个中位数的时间 ...
2019-08-23 11:41:06 116
原创 剑指offer :字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。c++ 中常用类 stringc++ 中 auto 关键字的用法c++ 中unique函数解析c++ 中sort函数的第三个参数c++ 查询某个变量的类型class Solution ...
2019-08-21 12:07:55 99
原创 剑指offer: 复杂链表的复制 + 二叉搜索树与双向链表
复杂链表的复制:题目: 在复杂链表中,每个节点除了有一个 next 指针指向下一个结点,还有一个 random 指针指向链表中的任意结点或者nullptr。分析: 首先复制原始链表上的每个节点,使用next指针相连。然后设置每个节点的 random 指针,设结点N指向结点S,定位 S 的位 置需要从原始链表的头结点开始找。如果从原始链表的头结点经过s步找到S,那么在复制链表上结点N'的S...
2019-08-19 12:10:37 108
原创 vscode中markdown的简单使用
谨以此文帮助 你 快速入门markdown1. 安装插件点击左边栏目中第五个图标,搜索 Markdown Preview Enhanced, 点击 install 进行安装。待安装完毕后,重新启动 vscode。2. 建立 md 文件,进入预览模式打开一个文件夹,并建立 .md 文件。点击右边的 markdown preview enhanced 按钮,进入预览模式...
2019-08-17 23:23:42 9034 2
原创 剑指offer: 从上到下打印二叉树(三连问)
题目1:不分行从上到下打印二叉树 从上到下打印出二叉树的每个节点,同一层的结点按照从左到右的顺序打印。分析: 使用队列实现class Solution {public: queue<TreeNode*> queue_help; vector<int> PrintFromTopToBottom(TreeNode* root) {...
2019-08-17 11:01:13 98
原创 剑指offer: 包含min函数的栈、栈的压入弹出序列
包含min函数的栈题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在 该栈中,调用min、push及pop的时间复杂 度都是O(1)。分析:使用辅助栈,每当加入一个新的元素,都将当前最小值压入辅助栈(辅助栈的栈顶总是当前所有元素中的最小元素)。class Solution {public: stack<int> stack_...
2019-08-16 12:24:50 97
原创 剑指offer——牛客网怎么用、怎么在Dev中调试代码
此文用来帮助刚入坑剑指offer的 小可爱 顺利使用牛客网进行练习。1. 搜索 剑指offer牛客网 进入页面。2. 搜索相应题目进入提交页面可以看到左边是题目,右边是提交页面。牛客网提供的这个接口会让萌新感到很疑惑,接下来展示怎么在Dev C++中使用。3. 将右边的内容复制,粘贴到Dev C++中并添加相应的库函数(别忘了 using namespace ...
2019-08-15 11:19:37 4641
原创 剑指offer:树的子结构、二叉树的镜像、对称的二叉树
剑指offer:树的子结构、二叉树的镜像、对称的二叉树题目: 树的子结构: 输入两棵二叉树A和B,判断B是不是A的子结构。 分析: 1. 查找树A中与树B根节点一样的结点(树的遍历)。 2. 判断A中以该结点为根节点的子树是不是和B具有一样的结构。 注:在写树的代码的时候,要时刻注意该地址是否可能是nullptr/*s...
2019-08-15 10:40:46 94
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人