随笔分类 - 数据结构及算法实现
摘要:给定一个排序数组,需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度 数组nums=[0,0,1,1,1,2,2,3,3,4] 函数应该返回新的长度为5,并且原数组nums的前五个元素被修改为0,1,2,3,4。不要使用额外的数组空间,必须在原地修改输入数据并在O(1)额外
阅读全文
摘要:给定一个未排序的整数数组,找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间O(1)。 这道题
阅读全文
摘要:给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 数组长度不超过1000。 数组里整数的范围为 [0, 1000]。 三条边要能
阅读全文
摘要:给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K但尽可能地接近 K,返回这两个元素的和。 如不存在这样的两个元素,请返回 -1。 示例1: 输入:A = [34,23,1,24,75,33,54,8], K = 60 输出:58 解释: 34 和 24 相加得到 5
阅读全文
摘要:返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 如果没有和至少为 K 的非空子数组,返回 -1 。 示例 1: 输入:A = [1], K = 1 输出:1 示例 2: 输入:A = [1,2], K = 4 输出:-1 示例 3: 输入:A = [2,-1,2], K = 3 输出
阅读全文
摘要:s="anagram", t="nagaram"这就属于异位词,长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同而已s="rat",t="car"这种就不属于异位词,因为s中的'r'在t中没有思路:1 首先看字符串长度是否一样,不一样则为false2 看每个字符出现的频率是否一样,
阅读全文
摘要:对于字符cabadabae来说,已有的回文有aba, ada,abadaba。最长的显然是abadaba。如果简单点要找出最长的回文。可以用遍历的方式,时间负责度将是O(n^3)。为了降低时间负责度,我们就必须采用另外的方式。由于回文是左右对称的,因此我们可以利用左右对称的这个特性来寻找答案 对于字
阅读全文
摘要:首先来思考一个问题: 设计一个公平的洗牌算法 1. 看问题,洗牌,显然是一个随机算法了。随机算法还不简单?随机呗。把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可。 如果你的答案是这样,通常面试官会进一步问一下,k 应该取多少?100?1000?10000? 很显然,取一个固定的值不合
阅读全文
摘要:一 有40亿个整数,再给一个新的整数,需要判断新的整数是否在1亿个整数中。 此处需要用到bitmap方法,每个整数用一个bit表示,1表示存在,0表示不存在。因此一个4字节的int=32个bit也就是可以表示32个数字,那么1亿个数字需要 100000000/32个int型。也就是需要申请10000
阅读全文
摘要:前面介绍的链表,栈,队列都是一种顺序容器,访问元素的时候都是通过位置来访问的。如果想要通过值的方式来获取数据,只能通过遍历的方式。这在时间上消耗比较大。而二叉树可以做到不用遍历就可以通过值的方式来获取数据。二叉树是按值来保存元素,也按值来访问元素。 二叉树的相关术语: 树的结点:包含一个数据元素及若
阅读全文
摘要:和栈的先进后出不同,队列的形式是先进先出,队列的想法来自于生活中排队的策略, 顾客在付款结账的时候,按照到来的先后顺序排队结账。先来的顾客先结账,后来的顾客后结账。 队列有两种实现形式:1 顺序表实现 2 循环顺序表 首先来看下顺序表的实现,在python中,队列的实现用list来写十分的方便。实现
阅读全文
摘要:栈和队列也是数据结构中经常用到的一种容器.栈是先进后出FILO,队列是先进先出FIFO.在C语言中,栈可以用数组或者链表来实现,在python中,list也就是列表也可以当做栈使用.比如在尾部压入元素可以用append的方法,压出元素可以用pop的方法.访问栈定元素可以用list[-1]的方法.但是
阅读全文
摘要:字符串查找和匹配是一个很常用的功能,比如在爬虫,邮件过滤,文本检索和处理方面经常用到。相对与C,python在字符串的查找方面有很多内置的库可以供我们使用,省去了很多代码工作量。但是我们还是需要了解一些常用的字符串查找算法的实现原理。 首先来看python内置的查找方法。查找方法有find,inde
阅读全文
摘要:线性表有两种,一种是顺序表,一种是链接表 在C语言中,顺序表通常通过数组或者申请一块内存来实现。在python中有列表和元组的结构可供使用,但由于元组一旦申请后无法改变空间大小和值,因此只有列表可以完成线性表的作用 线性表的优点和缺点都在于元素存储的集中方式和连续性,由于连续因此进行访问和删除都很容
阅读全文