<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[starflyyy的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/starflyyy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; starflyyy]]></copyright><item><title><![CDATA[香港大学HKU MDASC 面经笔经 (21 spring)]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/115177402</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/115177402</guid><author>starflyyy</author><pubDate>Wed, 24 Mar 2021 15:48:56 +0800</pubDate><description><![CDATA[笔试

总共有 10 道英文选择题，一道 python 编程题目。

统计与数理统计（占半数以上题目）

当时在网络上所有复习资料的时候无意中发现了 MIT 的复习资料：MIT 复习资料。总体来说非常有帮助。



我做了其中的 Exam 1 Practice Questions I (边看答案边做，用于复习回顾)，Exam1 Practice Questions II (不看答案直接做，检验效果), Exam 2 Practice Questions (第二部分、第三部分)， Final Exam Pr.]]></description><category></category></item><item><title><![CDATA[DBSCAN 密度聚类]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/112802081</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/112802081</guid><author>starflyyy</author><pubDate>Tue, 19 Jan 2021 11:57:10 +0800</pubDate><description><![CDATA[DBSCAN 密度聚类算法:

具体数学解释及算法见DBSCAN 密度聚类算法， 本文主要进行实践。

背景:

对于金融机构或者电商来说，常常面临团伙套现问题。具体来说，欺诈团伙在电商利用无息(或低息)购物贷款大量购买商品，并在其他平台出售从而完成套现。对于金融机构来说，此类行为占用了大量的资金。

DBSCAN 的特性及适合性

DBSCAN 可以对任意形状的稠密数据集进行聚类(凸和非凸均可)，套现团伙在地理位置上常常表现为非凸(现实社区形状不规则，可能出现互相嵌套的情况)。
	DBSCAN 不需要事.]]></description><category></category></item><item><title><![CDATA[Leetcode: 200. 岛屿数量]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107341021</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107341021</guid><author>starflyyy</author><pubDate>Tue, 14 Jul 2020 16:35:43 +0800</pubDate><description><![CDATA[题目

给你一个由'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','...]]></description><category></category></item><item><title><![CDATA[Leetcode: 35. 搜索插入位置]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107161664</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107161664</guid><author>starflyyy</author><pubDate>Mon, 06 Jul 2020 16:26:11 +0800</pubDate><description><![CDATA[题目

给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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 所在的位置。.]]></description><category></category></item><item><title><![CDATA[Leetcode: 33. 搜索旋转排序数组]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107160014</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107160014</guid><author>starflyyy</author><pubDate>Mon, 06 Jul 2020 15:50:12 +0800</pubDate><description><![CDATA[题目

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如，数组[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...]]></description><category></category></item><item><title><![CDATA[Leetcode: 215. 数组中的第 k 个最大元素]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107127410</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107127410</guid><author>starflyyy</author><pubDate>Sat, 04 Jul 2020 17:53:18 +0800</pubDate><description><![CDATA[题目

在未排序的数组中找到第 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.]]></description><category></category></item><item><title><![CDATA[Leetcode: 75. 颜色分类]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107121674</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107121674</guid><author>starflyyy</author><pubDate>Sat, 04 Jul 2020 11:45:32 +0800</pubDate><description><![CDATA[题目

给定一个包含红色、白色和蓝色，一共n 个元素的数组，原地对它们进行排序，使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。

此题中，我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。

注意:
不能使用代码库中的排序函数来解决这道题。

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
进阶：

一个直观的解决方案是使用计数排序的两趟扫描算法。
首先，迭代计算出0、1 和 2 元素的个数，然后按照0、1、2的排序，重写当前数组。
你能想出一个仅使用常..]]></description><category></category></item><item><title><![CDATA[Leetcode: 1498. 满足条件的子序列数目]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107035687</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107035687</guid><author>starflyyy</author><pubDate>Tue, 30 Jun 2020 11:05:33 +0800</pubDate><description><![CDATA[题目

给你一个整数数组 nums 和一个整数 target 。

请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。

由于答案可能很大，请将结果对 10^9 + 7 取余后返回。

示例 1：

输入：nums = [3,5,6,7], target = 9
输出：4
解释：有 4 个子序列满足该条件。
[3] -&gt; 最小元素 + 最大元素 &lt;= target (3 + 3 &lt;= 9)
[3,5] -&gt; (3 + 5 ]]></description><category></category></item><item><title><![CDATA[Leetcode: 1497. 检查数组对是否可以被 k 整除]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107023522</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107023522</guid><author>starflyyy</author><pubDate>Mon, 29 Jun 2020 17:02:14 +0800</pubDate><description><![CDATA[题目

给你一个整数数组 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 =.]]></description><category></category></item><item><title><![CDATA[Leetcode: 1496. 判断路径是否相交]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/107021627</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/107021627</guid><author>starflyyy</author><pubDate>Mon, 29 Jun 2020 16:19:55 +0800</pubDate><description><![CDATA[题目

给你一个字符串 path，其中 path[i] 的值可以是 'N'、'S'、'E' 或者 'W'，分别表示向北、向南、向东、向西移动一个单位。

机器人从二维平面上的原点 (0, 0) 处开始出发，按 path 所指示的路径行走。

如果路径在任何位置上出现相交的情况，也就是走到之前已经走过的位置，请返回 True ；否则，返回 False 。

示例 1：

输入：path = "NES"
输出：false
解释：该路径没有在任何位置相交。



示例 2：

输入：path = "NESWW".]]></description><category></category></item><item><title><![CDATA[Leetcode: 47. 全排列II]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106983235</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106983235</guid><author>starflyyy</author><pubDate>Sat, 27 Jun 2020 15:53:43 +0800</pubDate><description><![CDATA[题目

给定一个可包含重复数字的序列，返回所有不重复的全排列。

示例:

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

分析

该题目和全排列I的差别在于：本题目可以包含重复的数字，并且要求返回所有不重复的全排列。

按照常规的思路，我们画出深度优先搜索树，并确定路径和可选列表。

如 nums = [1, 2, 2], 它的深度优先搜索树如下：



最关键的是去重操作：


for (int i = 0; i &lt; candidate...]]></description><category></category></item><item><title><![CDATA[Leetcode: 90. 子集II]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106979265</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106979265</guid><author>starflyyy</author><pubDate>Sat, 27 Jun 2020 10:50:19 +0800</pubDate><description><![CDATA[题目

给定一个可能包含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。

说明：解集不能包含重复的子集。

示例:

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

分析

与子集I的区别在于 nums 包含了重复的元素。那么只需要先将 nums 进行排序(将重复的值集中到一起)，然后再填加额外一行代码去重就可以了。



如上图，nums = [1, 2, 2], 为两个2加标记，用于区分。

...]]></description><category></category></item><item><title><![CDATA[Leetcode: 78. 子集I]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106978474</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106978474</guid><author>starflyyy</author><pubDate>Sat, 27 Jun 2020 09:29:48 +0800</pubDate><description><![CDATA[题目

给定一组不含重复元素的整数数组nums，返回该数组所有可能的子集（幂集）。

说明：解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
 [3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

分析

子集是回溯法的另一类经典题目，解决方法还是画出深度优先搜索树，找到路径和可选列表，与全排列不同的点有两个：一是集合是无序的，二是树中每一个结点都应该直接加入答案集。



可以发现，在同一...]]></description><category></category></item><item><title><![CDATA[Leetcode: 46. 全排列I]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106971928</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106971928</guid><author>starflyyy</author><pubDate>Fri, 26 Jun 2020 17:25:35 +0800</pubDate><description><![CDATA[题目

给定一个 没有重复 数字的序列，返回其所有可能的全排列。

示例:

输入: [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&lt;List&lt;Integer&gt;&gt...]]></description><category></category></item><item><title><![CDATA[Leetcode 刷题模板总结]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106971709</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106971709</guid><author>starflyyy</author><pubDate>Fri, 26 Jun 2020 16:53:54 +0800</pubDate><description><![CDATA[回溯法：

回溯法是一种特殊的深度优先搜索算法(DFS), 做该类题目的要点在于画出深度优先搜索树，然后确定相应的路径和可选列表。

模板：


List&lt;.&gt; res = new ArrayList&lt;&gt;();
public void backtrack(路径, 可选列表) {
    if (满足结束条件) {
        加入 res;
        return;
    }
    for (选择 : 选择列表) {
        做出选择;
        back]]></description><category></category></item><item><title><![CDATA[Leetcode 22: 括号生成]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106970048</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106970048</guid><author>starflyyy</author><pubDate>Fri, 26 Jun 2020 15:48:53 +0800</pubDate><description><![CDATA[题目

数字 n代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。

示例：

输入：n = 3
输出：[
   "((()))",
   "(()())",
   "(())()",
   "()(())",
   "()()()"
  ]

分析

该题目也是利用回溯法的经典题目，与电话号码的字母组合十分类似，重要的是画出深度优先搜索树，并找到路径和可选列表。



用 left， right 表示可选列表，sb 记录当前...]]></description><category></category></item><item><title><![CDATA[Leetcode: 17. 电话号码的字母组合]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106968098</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106968098</guid><author>starflyyy</author><pubDate>Fri, 26 Jun 2020 12:58:27 +0800</pubDate><description><![CDATA[题目

给定一个仅包含数字2-9的字符串，返回所有它能表示的字母组合。

给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。



示例:

输入："23"
输出：["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的，但是你可以任意选择答案输出的顺序。

分析

对于这类利用回溯法的题目，最重要的是将深度优先搜索树画出来，并找出路径和可选列表。



然后，我们只要用代码模拟出深度优先搜..]]></description><category></category></item><item><title><![CDATA[Leetcode：334. 递增的三元子序列]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106955938</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106955938</guid><author>starflyyy</author><pubDate>Thu, 25 Jun 2020 10:57:25 +0800</pubDate><description><![CDATA[题目

给定一个未排序的数组，判断这个数组中是否存在长度为 3 的递增子序列。

数学表达式如下:

如果存在这样的i, j, k,且满足0 ≤ i &lt; j &lt; k ≤ n-1，
使得arr[i] &lt; arr[j] &lt; arr[k] ，返回 true ;否则返回 false 。
说明: 要求算法的时间复杂度为 O(n)，空间复杂度为 O(1) 。

示例 1:

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

示例 2:

输入: [5,4,3,2,1]
输出: fa...]]></description><category></category></item><item><title><![CDATA[Leetcode: 16. 最接近的三数之和]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106955673</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106955673</guid><author>starflyyy</author><pubDate>Thu, 25 Jun 2020 10:41:05 +0800</pubDate><description><![CDATA[题目

给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数，使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例：

输入：nums = [-1,2,1,-4], target = 1
输出：2
解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

提示：

3 &lt;= nums.length &lt;= 10^3
-10^3&lt;= nums[i]&lt;= 10^3
-10^4...]]></description><category></category></item><item><title><![CDATA[Leetcode: 15. 三数之和]]></title><link>https://blog.youkuaiyun.com/starflyyy/article/details/106955473</link><guid>https://blog.youkuaiyun.com/starflyyy/article/details/106955473</guid><author>starflyyy</author><pubDate>Thu, 25 Jun 2020 10:35:52 +0800</pubDate><description><![CDATA[题目

给你一个包含 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)。可以先固定一个值，然后寻找后两个值时可采取双指针的方法，将总的时间复杂度优化...]]></description><category></category></item></channel></rss>