自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 解决Android Studio 模拟器报错:AVD is already running , delete the *.lock and try again(不是删除.lock文件)

后来我想,这玩意似乎是防止多个模拟器冲突的,也就是保证同一时间内只有一个模拟器运行,即锁住这个资源。然后我就试着把所有其他模拟器关掉,尤其是雷电模拟器。在网上搜出的解决办法都是删.lock文件,我试过了,没用,要么删不了,要么删后再启动还在,差点把我整破防了......

2024-09-15 17:57:52 281

原创 动态规划高频问题(算法村第十九关白银挑战)

本方法假定第一个格子无障碍物的情况下,第一列均可达,而这有根本性错误:第一列的其他行可能存在障碍物,此时不可达。已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。换句话说,其值等于一个整数自乘的积。数组中的每个元素代表你在该位置可以跳跃的最大长度。= 1,合理,因为用一个数字只能构成一种解码方案。在「杨辉三角」中,每个数是它左上方和右上方的数的和。所以,对每个格子,都要先判断是否有障碍物,再对其。

2024-05-16 09:26:23 468 1

原创 算法设计作业:用动态规划求解多段图的最短路径问题

对如下图所示的一个5段图,图上的数字代表该段路径的成本。写出求最短路径的计算过程,给出最短路径和距离

2024-04-02 21:56:51 725 2

原创 双色球选号 python

编写一个能实现双色球选号的小程序。双色球选号由7个数字组成,其中有6个红球,其号码的取值范围为[1,33];一个蓝球的取值范围为[1,16],其输出格式为09 12 16 20 30 33 | 03。(注意,如双色球号码为3,则必须输出03)

2024-03-08 14:02:46 1204

原创 打印三角形图案 Python

根据参数`pow`编写一个能打印`pow`行三角形图案的函数。

2024-03-08 11:13:07 464

原创 计算阶梯数 Python

当取模的结果分别等于1、2、4、5、0时,退出循环,否则 n 递增。最后,返回答案 n。阶梯数 n 初始化为7,在一个循环中,对 n 分别取2、3、5、6、7的模,总结:一道简单的循环、条件判断、取模运算问题。只有每步上7阶,最后刚好一阶也不剩。请编程求解该阶梯至少有多少阶。若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;

2024-03-07 21:27:21 694

原创 《幸运的基督徒》Python

15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。一开始先将每个位置上的人视作基督徒,然后开始报数,报9的人定为非基督徒(即扔掉)重新报数时跳过已经定为非基督徒的位置。这个过程一直重复,直到基督徒只剩15人。报到9的人继续扔到海里面,直到扔掉15个人。有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,为了能让一部分人活下来不得不将其中15个人扔到海里面去,报到9的人就扔到海里面,他后面的人接着从1开始报数,有15个基督徒和15个非基督徒在海上遇险,

2024-03-07 21:02:40 592

原创 详解动态规划(算法村第十九关青铜挑战)

这个题目涵盖了dp的多个方面,比如重复子问题(递归)、记忆化搜索(将已经计算好的结果存入数组,后面用到就直接读取)、滚动数组(二维数组优化为一维数组)。

2024-03-03 19:50:11 1194

原创 回溯难题(算法村第十八关黄金挑战)

考虑到构造IP地址时还要手动给添加三个小数点,所以我们用变量。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。的字符串,返回所有它能表示的字母组合。,用以表示一个 IP 地址,返回所有可能的。正好由四个整数(每个整数位于。之间组成,且不能含有前导。给定一个只包含数字的字符串。IP地址只有四段,所以将。说明字符串分成了4段了。,这些地址可以通过在。分割的段数 == 4。

2024-03-03 13:51:57 535

原创 回溯热门问题(算法村第十八关白银挑战)

当我们用小写字符的ASCII码值与32进行异或操作时,第五位(从右向左数,起始位为第零位)会翻转,因为32的二进制表示中只有第五位是1。当我们用大写字符的ASCII码值与32进行异或操作时,同样地,第五位会翻转,我们就得到了对应的小写字符的ASCII码值。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。O(n)为判断回文串的开销,O(n ^ 2)为枚举所有子串的开销(一个集合的所有子集个数)。例如,大写的’A’的ASCII码值是65,其二进制表示为。

2024-03-02 15:36:55 933

原创 回溯是怎么回事(算法村第十八关青铜挑战)

返回所有从根节点到叶子节点的路径。路径总和等于给定目标和的路径。给你一个二叉树的根节点。是指没有子节点的节点。是指没有子节点的节点。

2024-03-01 11:56:05 426

原创 跳跃游戏问题(算法村第十七关黄金挑战)

其实不用关心跳几步,怎么跳,而是要关心最大的跳跃范围能不能覆盖到终点。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。向前跳转的最大长度。生成的测试用例可以到达。处,你可以跳转到任意。给你一个非负整数数组。

2024-02-29 10:00:03 513

原创 贪心高频问题(算法村第十七关白银挑战)

二维数组实际上是一个数组的数组,因此不能直接删除其中的元素。但是,我们可以通过创建一个新的二维数组,将原数组中除了要删除的元素之外的所有元素复制到新数组中,从而实现删除元素的效果。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。大致思路比较简单,但还需要一些比较细致巧妙的代码处理,比较边界的过程就体现了贪心的思想。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2024-02-27 20:57:20 790

原创 贪心算法入门题(算法村第十七关青铜挑战)

贪心算法(贪婪算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优的选择,从而希望能够导致结果是最好或者最优的算法。贪心算法要么得到最优解,要么得到近似最优解。贪心的题目没有固定的套路,一题一法,好在大部分的贪心算法题不是特别难,因此公认的贪心学习法则是“直接做题,不考虑贪不贪心”。

2024-02-07 11:59:20 1462

原创 堆与滑动窗口的结合(算法村第十六关黄金挑战)

的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。滑动窗口每次只向右移动一位。

2024-02-06 11:21:14 480

原创 滑动窗口经典问题(算法村第十六关白银挑战)

向内收缩的过程中,两板距离一定减小,收缩短板一侧可能使短板变长板,原来的长板成为新的短板,从而使面积增大;但收缩长板一侧并不能改变原来的短板,甚至可能会使长板变短板,导致面积进一步减小。所以我们只有在遍历的过程中,不断收缩短板一侧即可,同时记录最大盛水容量(面积),并返回其长度**。**如果不存在符合条件的子数组,返回。的子串,返回这些子串的起始索引。指由相同字母重排列形成的字符串(包括相同的字符串)。字符的最长子串,并返回该子串的长度。轴共同构成的容器可以容纳最多的水。的最长子串,并返回该子串的长度。

2024-02-06 10:02:14 830

原创 滑动窗口入门(算法村第十六关青铜挑战)

最后一个问题,那双指针和滑动窗口有啥区别?滑动窗口是双指针的一种类型,主要关注两个指针之间元素的情况,因此范围更小一些,而双指针的应用范围更大,花样也更多。

2024-01-31 10:14:46 477

原创 超大规模数据场景的问题(算法村第十五关黄金挑战)

这里给出大小是20GB,其实面试官就在暗示你不要将所有的文件都装入到内存里,因此我们只能将文件划分成一些块,每块大小是 x MB,x就是可用内存的大小,例如1GB一块,那我们就可以将文件分为20块。首先遍历10亿个数字找最小,然后再遍历一次找第二小,然后再一次找第三小,直到找到第100万个。然后遍历整个序列,只有比堆顶元素小的才允许插入堆中,并删除原堆的最大元素。之后继续遍历剩下的数字,最后剩下的就是最小的100万个。堆排序也称为外部排序。设计一个算法,给定一个10亿个数字,找出最小的100万个的数字。

2024-01-31 09:09:47 340

原创 海量数据场景下的热门算法题(算法村第十五关白银挑战)

对每一台机器来说,如果分到的数据量依然很大,比如,内存不够或存在其他问题,可以再用哈希函数把每台机器的分流文件拆成更小的文件处理。处理每一个小文件的时候,通过哈希表统计每种词及其词频,哈希表记录建立完成后,再遍历哈希表,遍历哈希表的过程中使用大小为100的小根堆来选出每一个小文件的Top100(整体未排序的Top100)。总之,牢记一点,很多大数据问题都离不开分流,要么是用哈希函数把大文件的内容分配给不同的机器,要么是用哈希函数把大文件拆成小文件,然后处理每一个小数量的集合。

2024-01-25 18:47:15 907

原创 海量数据场景下的热门算法题(算法村第十五关白银挑战)

对每一台机器来说,如果分到的数据量依然很大,比如,内存不够或存在其他问题,可以再用哈希函数把每台机器的分流文件拆成更小的文件处理。处理每一个小文件的时候,通过哈希表统计每种词及其词频,哈希表记录建立完成后,再遍历哈希表,遍历哈希表的过程中使用大小为100的小根堆来选出每一个小文件的Top100(整体未排序的Top100)。总之,牢记一点,很多大数据问题都离不开分流,要么是用哈希函数把大文件的内容分配给不同的机器,要么是用哈希函数把大文件拆成小文件,然后处理每一个小数量的集合。

2024-01-25 18:46:27 1231

原创 用4KB内存寻找重复元素(算法村第十五关青铜挑战)

在海量数据中,普通的数组、链表、Hash、树等等结构无效,因为内存空间不足。而常规的递归、排序,回溯、贪心和动态规划等思想也无效,因为执行超时。这类问题该如何下手呢?这里介绍三种非常典型的思路:1.使用位存储。使用位存储最大的好处是占用的空间是简单存整数的1/8。例如一个40亿的整数数组,如果用整数存储需要16GB左右的空间,而如果使用位存储,就可以用0.5GB的空间,这样很多问题就能够解决了。2.外部排序。

2024-01-25 11:08:51 506

原创 数据流的中位数(算法村第十四关黄金挑战)

是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。

2024-01-25 09:15:01 423

原创 堆能高效解决的经典问题(算法村第十四关白银挑战)

中元素的默认排序是升序排序。这意味着队列头部的元素(堆顶元素)将是最小的元素。先将每个链表的头节点放入小根堆,出来一个再放入下一个,这样可以维持一个小堆,减少堆的自我排序时间,也将原先的空间复杂度。第 K 个最大元素,就是在数组排序以后,后 K 个元素中最小的元素。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。请注意,你需要找的是数组排序后的第。找第K大用小根堆,找第K小用大根堆。你必须设计并实现时间复杂度为。个最大的元素,而不是第。

2024-01-24 21:46:02 386

原创 堆结构(算法村第十四关青铜挑战)

堆结构是一种非常重要的基础数据结构,也是算法的重要内容,很多题目甚至只能用堆来进行。由于堆的构造和维护过程都非常复杂,因此面试时一般不需要手写堆的实现过程,但是java、python、C++已经提供了一些工具,因此需要知道思路就可以。本关主要介绍堆如何增删改查的,不用管代码怎么写,后面再介绍如何使用堆来解决问题。

2024-01-24 18:36:41 546

原创 数论问题(算法村第十三关黄金挑战)

对 n 反复除以 2,3,5,直到 n 不再包含质因数 2,3,5。若剩下的数等于 1,则说明 n 不包含其他质因数,n是丑数;否则,说明n包含其他质因数,n不是丑数。当 n>0 时,若 n 是丑数,则 n 可以写成 n = 2^a + 3^b + 5^c 的形式,其中 a,b,c 都是非负整数。一般来说题目里 n 的规模达到 10^5 及以上时,需要实现的程序的时间复杂度最高只能是 O(n logn)特别地,当 a,b,c 都是 0 时,n=1。根据丑数的定义,0 和负整数不是丑数。空间复杂度:O(1)

2024-01-24 17:49:55 419

原创 数字与数学高频问题(算法村第十三关白银挑战)

正整数 n 是 2 的幂,当且仅当 n 的二进制表示中只有最高位是 1,其余位都是 0。给定一个整数,写一个函数来判断它是否是 3 的幂次方。给定一个整数,写一个函数来判断它是否是 4 的幂次方。2的幂次方的特点:整除2后是偶数,不断整除2的结果是1。,请你判断该整数是否是 2 的幂次方。数组所表示的非负整数,在该数的基础上加一。,以二进制字符串的形式返回它们的和。是 3 的幂次方需满足:存在整数。是 4 的幂次方需满足:存在整数。一定是最大的3的幂次方的除数。是3的幂次方,则整型范围内。

2024-01-24 15:04:04 572

原创 数字与数学的基础问题(算法村第十三关青铜挑战)

数学的门类很多,涉及的范围很广,很多难度也超大,但是在算法中,一般只会选择各个学科的基础问题来考察,例如素数问题、幂、对数、阶乘、幂运算、初等数论、几何问题、组合数学等等。

2024-01-23 22:00:40 1016

原创 字符串冲刺题(算法村第十二关黄金挑战)

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个。**进阶:**如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。修改输入数组**、使用 O(1) 的额外空间解决这一问题。不要给另外的数组分配额外的空间,你必须**它的第一个不重复的字符,并返回它的索引。是由非空格字符组成的字符串。**注意:**输入字符串。

2024-01-23 16:08:49 549

原创 字符串经典基础面试题(算法村第十二关白银挑战)

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个。**进阶:**如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。修改输入数组**、使用 O(1) 的额外空间解决这一问题。不要给另外的数组分配额外的空间,你必须**它的第一个不重复的字符,并返回它的索引。是由非空格字符组成的字符串。**注意:**输入字符串。

2024-01-21 16:30:10 848

原创 不简单的字符串转换问题(算法村第十二关青铜挑战)

这个问题其实没有考察算法的知识,模拟的是日常开发中对于原始数据的处理(例如「参数校验」等场景),如果面试中遇到类似的问题,应先仔细阅读题目文字说明和示例,有疑惑的地方和需要和面试官确认,在编码的时候需要耐心和细心地调试。3、不得不写得比较繁琐、冗长的时候,需要写清楚注释、体现逻辑层次,以便上线以后排查问题和后续维护。1、有现成的工具和类库需尽量使用,因为它们是性能更优,且经过更严格测试,是相对可靠的;,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。大写字母和小写字母的值之间存在固定的差异。

2024-01-21 13:04:58 686

原创 位运算实现压缩存储(算法村第十一关黄金挑战)

如果只有4KB的空间,那么只能寻址842^10个比特,这个值比32000要大的,因此我们可以创建32000比特的位向量(比特数组),其中一个比特位置就代表一个整数。题目要求:给定一个数组,包含从1到N的整数,N最大为32000,数组可能还有重复值,且N的取值不定,若只有4KB的内存可用,该如何打印数组中所有重复元素。利用这个位向量,就可以遍历访问整个数组。如果发现数组元素是V,那么就将位置为V的设置为1,碰到重复元素,就输出一下。

2024-01-19 17:46:35 373

原创 位运算的高频算法题(算法村第十一关白银挑战)

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为。写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。颠倒给定的 32 位无符号整数的二进制位。中,此时便将最低位颠倒到了最高位。的最低位(每轮右移一位),如此循环,直到。**提示:**保证乘法范围不会溢出。让原始数据不断左移一位,通过与。,计算其二进制表示中 1。(系统会自动转变为二进制),计算并返回两整数之和。,便得到颠倒后的十进制数。

2024-01-19 12:50:31 324

原创 位运算的规则(算法村第十一关青铜挑战)

参与运算的两数各对应的二进位相异或,当对应的2个二进位相异时,结果位为1,相同则结果位为0。按二进制形式把所有的数字向右移动对应的位数,低位舍弃,高位补符号位(即正数补零,负数补1)。参与运算的两数对应的二进位相与,只有对应的2个二进位均为1时,结果位才为1 ,否则为0。参与运算的两数对应的二进位相或,只要对应的2个二进位有一个为1时,结果位就为1。按二进制形式把所有的数字向左移动对应的位数,高位舍弃,低位补零。需要移位的数字 > 移位的次数。0110(6的二进制)

2024-01-18 17:21:58 435

原创 实现归并排序(算法村第十关黄金挑战)

【代码】实现归并排序(算法村第十关黄金挑战)

2024-01-18 15:57:02 645

原创 数组中第K个最大元素(算法村第十关白银挑战)

给定整数数组nums和整数k,请返回数组中第**k**个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。

2024-01-17 18:08:16 396

原创 清晰易懂学透快速排序(算法村第十关青铜挑战)

【代码】清晰易懂学透快速排序(算法村第十关青铜挑战)

2024-01-17 13:25:34 468

原创 两道有挑战的问题(算法村第九关黄金挑战)

构造一棵二叉搜索树时,升序序列中的任一个元素都可以作为根节点,然后以该元素左边的升序序列构建左子树,以该元素右边的升序序列构建右子树。本题要求高度平衡,因此需要选择升序序列的中间元素作为根节点,这本质上就是二分查找的过程。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。排列,请你将其转换为一棵。

2024-01-17 11:25:56 360

原创 二分查找与搜索树的高频问题(算法村第九关白银挑战)

剑指 offer :一个长度为 n - 1 的递增排序数组中的所有数字都是唯一的,每个数字的范围都是 [0,n-1]。在范围 0~n-1 内的 n 个数字中有且只有一个数字不在该数组中,请找出这个数字。二叉搜索树「中序遍历」序列是升序的,所以我们在中序遍历时,实时检查当前节点的值是否大于前一个节点的值即可。下面两棵树的中序序列分别是{3,6,9,10,14,16,19},{3,6,9,10},因此都是搜索树。,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。的数组,预先按照升序排列,经由。

2024-01-15 16:11:54 1083

原创 逢试必考的二分查找(算法村第九关青铜挑战)

意思是二进制数的每个位右移 x 位。从十进制的角度看, x 是以 2 为底的指数,这个指数就是除数。,所以需要使用括号来保证正确的优先级。除法在计算机中效率很低,一般改用。在 Java 中,位运算符。的优先级低于加法运算符。

2024-01-12 11:25:55 499

原创 二叉树的最近公共祖先(算法村第八关黄金挑战)

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大([2, 105]Node.val互不相同p!= qpq。

2024-01-11 12:46:32 532

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除