
数据结构与算法
【剑指offer】和【Leetcode】
hannah_fire
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
编程题之背包问题
01背包问题# 示列 1# 输入"""5 108 610 44 25 45 3"""# 输出"""19"""# 示列 2# 输入"""1 110 2"""# 输出"""0"""代码# 01背包模板题def solve(weight,value, n, m): # dp = [[0]*(m+1) for _ in range(n+1)] for i in range(1,n+1): for j in range原创 2020-10-20 19:50:50 · 1404 阅读 · 0 评论 -
天翼云技术B卷编程题
1、丑数题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。原创 2020-09-17 21:35:21 · 968 阅读 · 1 评论 -
小米测开笔试题
1、分解质因数题目:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,否则称为合数。请将一个正整数分解质因数,如果输入的数不是合数,打印其本身,否则按照从小到大的属性打印出其质因子。输入样例:100输出样例:2255python代码:def primeFactorization(num): even = 2 res = [] while num >= even: if num // even == 0: res.append(ev原创 2020-09-16 15:52:57 · 1015 阅读 · 0 评论 -
【Leetcode 39】组合总和
题目描述解题思路解法一:回溯法比如:candidates = [2,3,6,7],target = 7找到全是2的组合是否能组成7,如果7-2-2-2!=0,则跳出循环,寻找2和下一个数的组合7-2-2-3=0,则接着找7-2-3之后列表中是否有满足的,由于列表进行了排序,发现7-2-3-2!=0,第一个数2不行就直接跳出,后面的3,6,7就不用再验证找到全为3的组合是否能组成7,此时直接从下标为1的数开始找,避免找到重复的组合,7-3-3-3!=0,跳出循环,7-3-6!=0,跳出循环原创 2020-06-30 15:48:20 · 6614 阅读 · 0 评论 -
【Leetcode 34】在排序数组中查找元素的第一个和最后一个位置
题目描述解题思路解法一:二分查找法第一步:通过正常的二分查找法定位到要查找到的元素第二步:定位到指定的元素后,再找到它的开始和结束位置举例说明:当nums[mid] == target时,开始查找第一个和最后一个位置:查找第一个位置,为了缩小右边界,开始从左边查找,如果nums[mid] = nums[mid-1],则target出现的第一个位置还需继续向左查找,继续使用二分法...原创 2020-04-17 23:57:53 · 206 阅读 · 0 评论 -
【Leetcode 33】搜索旋转排序数组
题目描述解题思路了解二分查找法二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。它的实质上、是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。举例说明:在数组中查找值为47的数。实现过程是通过变量left和right控制一个循环来查找元素(其中left和right是正在查...原创 2020-04-17 17:52:28 · 120 阅读 · 0 评论 -
【Leetcode 31】下一个排列
题目描述解题思路理解题意本题首先最大的难点是理解题目的意思,题目意思是给定一个有几个数字组成的数值,将这些数字重新排列,刚好得到比该数值大的新数值,如果没有比题目给定的数值大的就返回题目给的数值。比如说:给定的数值为123,比123大的数值有132、213、231、312、321,但题目要求的是刚好比123大一位的数值,就是132,而不是所有的更大数值,还要求空间复杂度为O(1)。那么如...原创 2020-04-15 18:54:38 · 110 阅读 · 0 评论 -
刷leetcode总结之【双指针法】
为什么要用到双指针在刷leetcode的过程中,很多题目都要求不能开辟更多的内存空间,只能在原有的内存空间上进行修改,对于常规的采用循环或者双重循环来说就不适用了,这是双指针法的好处就体现出来了什么是双指针法双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行扫描,从而达到相应的目的。双指针的类型第一种:头尾指针例如leetcod...原创 2020-04-13 18:33:17 · 208 阅读 · 0 评论 -
【Leetcode 28】实现strStr()
题目描述解题思路解法一:双指针法python代码原创 2020-04-13 18:05:42 · 95 阅读 · 0 评论 -
【Leetcode 27】移除元素
题目描述解题思路解法一:双指针法思路与26题删除数组中的重复项相似不同点:指针iii 和 jjj 同时从0出发,指针 jjj 来判断是否与val相等,相等则跳过;不等则将该值赋给指针 jjj ,并且iii 和 jjj 递增python代码class Solution: def removeElement(self, nums: List[int], val: int) -&...原创 2020-04-11 23:46:12 · 128 阅读 · 0 评论 -
【Leetcode 26】删除排序数组中的重复项
题目描述解题思路本题的目的是返回不重复数组的长度,并且代码能够展示出原来的数组长度不变,前n个数是不重复的数,后几个数与原数组对应的位置数值保持一致解法一:双指针法对排序后的列表,首先放置两个相邻的指针 iii 和 jjj ,其中 iii 是慢指针,jjj 是快指针:如果nums[i] == nums[j],则让 jjj 跳过重复项如果nums[i] != nums[j],则nu...原创 2020-04-11 23:00:59 · 160 阅读 · 0 评论 -
【Leetcode24 两两交换链表中的节点】
题目描述解题思路解法一:迭代法原链表:添加空头后的链表:第一次交换:①②③python代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclas...原创 2020-04-11 17:31:52 · 156 阅读 · 0 评论 -
【Leetcode 23】合并K个排序链表
题目描述解题思路解法一:暴力法遍历k个链表,将所有节点值保存到列表中将列表排序遍历排序后的列表,创建一个新的有序链表python代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.ne...原创 2020-04-10 23:33:15 · 140 阅读 · 0 评论 -
【Leetcode 22】括号生成
题目描述解题思路括号对数生成的有效括号0对括号[None]1对括号[’()’]2对括号[’()()’,’(())’]3对括号[’()()()’,’()(())’,’(())()’,’(()())’,’((()))’]思路一:首先将0组括号记为None,1组括号记为()当计算2组括号时,2组括号生成的有效括号必然是在1组括号的基础上生成...原创 2020-04-08 23:53:18 · 127 阅读 · 0 评论 -
【Leetcode 21】合并两个有序链表
题目描述解题思路解法一:比较链表l1和l2的值,谁小先指向谁,直至其中一个链表遍历结束,组成有序链表。python代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None...原创 2020-04-07 16:58:08 · 120 阅读 · 0 评论 -
【Leetcode 20】有效的括号
题目描述解题思路解法一:使用栈的思想算法原理:左括号则入栈,正好碰到对应的右括号入栈,则左右括号均出栈,遍历完所有有效的括号后则栈正好为空python代码class Solution: def isValid(self, s: str) -> bool: res = [] for i in s: if i =...原创 2020-04-06 23:28:42 · 111 阅读 · 0 评论 -
【Leetcode 19】删除链表的倒数第n个节点
题目描述解题思路解法一使用pop函数将值保存到列表中,使用pop函数删掉倒数第n个节点,再根据列表重新创建链表。python代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = ...原创 2020-04-06 18:49:44 · 111 阅读 · 0 评论 -
【Leetcode 17】电话号码的字母组合
题目描述解题思路解法一:python代码class Solution: def letterCombinations(self, digits: str) -> List[str]: hash = {'1':"", '2':"abc", '3':"def", '4':"ghi", '5':"jkl", '6':"mno", '7':"pqrs", '8':"...原创 2020-04-05 18:25:15 · 153 阅读 · 0 评论 -
【Leetcode 15】三数之和
题目描述解题思路解法一:双指针法特殊情况:不存在及长度小于3的直接返空首先对数组进行排序遍历排序后的数组1、若当前数字大于0,则不可能存在三个数加起来等于0,由于数组经过排序,后续数字必然也大于02、若当前数字与上一数字相同,则跳过,避免重复数组3、令左指针=i+1,右指针=len(nums)-1:若nums[i]+nums[L]+nums[R]=0,则执行循环,判断左边界...原创 2020-04-04 00:16:42 · 97 阅读 · 0 评论 -
【Leetcode 14】最长公共前缀
题目描述解题思路解法一:利用python中的set()函数和zip()函数关于set()函数和zip()函数语法说明可见博客:https://blog.csdn.net/weixin_44549556/article/details/104267319通过zip函数可将列表打包成元组,进而比较列表中每个字符串的每个字符是否相等通过set函数可得到无重复的集合对象,则判断该集合的长度是...原创 2020-04-02 17:34:57 · 124 阅读 · 0 评论 -
【Leetcode 13】罗马数字转整数
题目描述解题思路解法一1、将所有可能性的组合列入到哈希表中2、考虑可能出现的情况该字符完全存在于哈希表中,比如字符V——>4,字符CM——>900由于组合只能是一个字符或者两个字符,首先判断该字符串中前两个字符是否存在于哈希表中如果存在,则遍历剩余字符;如果不存在,判断前一个字符是否存在哈希表中python代码class Solution: def ro...原创 2020-04-02 00:20:34 · 102 阅读 · 0 评论 -
【Leetcode 12】整数转罗马数
题目描述解题思路解法一:贪心哈希表通过题目描述,可以得到以下数字及其罗马数的哈希表。贪心法则:尽可能的使用最大数来表示。比如:1954,依次选择1000,900,50,4来表示得到MCMLIVpython代码class Solution: def intToRoman(self, num: int) -> str: hashmap = {1000...原创 2020-04-01 17:35:43 · 132 阅读 · 0 评论 -
【Leetcode 11】盛最多水的容器
题目描述解题思路(双指针法)设置双指针iii,jjj分别位于容器两端,并且更新面积最大值 res,直到 i == j 时返回 res指针移动规则:水槽的实际面积由左右两端短板所决定,简单来说就是谁短向内移动谁。原因:若短板向内移,则实际面积必然大于或等于初始面积;若长板向内移,由于其移动导致宽度减1,导致实际面积小于或等于初始面积。python代码class Solution:...原创 2020-03-31 17:46:04 · 145 阅读 · 0 评论 -
【Leetcode 9】回文数
题目描述解题思路第一种:双指针法(需要将整数转成字符串)不断的将头和尾进行对比python代码class Solution: def isPalindrome(self, x: int) -> bool: str_x = list(str(x)) L = 0 R = len(str_x)-1 while L...原创 2020-03-31 00:16:01 · 103 阅读 · 0 评论 -
【Leetcode8】字符串转换整数
题目描述解题思路1、对于输入左边有空字符的,首先去掉空字符2、第一个非空字符必须为数字或者正负号3、第一个非空字符不为数字或者正负号则返回04、输入值不在区间[-231,231-1]之间的,该值大于231+1则返回2147483647,小于-231的则返回-2147483648python代码class Solution: def myAtoi(self, s: str...原创 2020-03-29 23:44:42 · 109 阅读 · 0 评论 -
【Leetcode7】整数反转
题目描述解题思路解法一:暴力法分情况:1、值只能在[−2^31, 2^31 − 1]区间,也就是(-2147483648 ,2147483647),否则返回02、值在(-10,10)区间直接返回该数3、当值前面有负号时,反转时不包括负号反转python代码 def reverse_force(self, x: int) -> int: if -10 &l...原创 2020-03-28 00:06:28 · 164 阅读 · 0 评论 -
【Leetcode5】最长回文子串
题目描述解题思路回文数:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。(第1个数和第n个数相等,第2个数和第n-1个数相等…)解法一:暴力法(超时)python代码枚举所有长度大于等于 2的子串,依次判断它们是否是回文;‘babad’,判断‘ba’,‘bab’,‘baba’,‘babad’,‘ab’,‘aba’,‘abad’,‘ba’,‘bad’,‘ad’是否符合回...原创 2020-03-26 22:22:51 · 159 阅读 · 0 评论 -
【Leetcode2】两数相加
题目描述解题思路① 两个链表长度相等L1:2 -> 4 -> 3L2:5 -> 6 -> 4p: 7 -> 0 -> 8② 两个链表长度不等L1:2 -> 4 -> 3 -> 6 -> 1L2:5 -> 6 -> 4p: 7 -> 0 -> 8 -> 6 -> 1python代...原创 2020-03-20 23:49:31 · 104 阅读 · 0 评论 -
【剑指offer48】不用加减乘除做加法(涉及到位运算)
位运算按位与运算符(&)定义:参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0 0&1=0 1&0=0 1&1=1总结:两位同时为1,结果才为1,否则结果为0。例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。按位或运算符(|)定义:参...原创 2020-02-26 00:29:00 · 123 阅读 · 0 评论 -
【剑指offer41、42】和为S的两个连续序列、两个数
题目描述用例输入输出1[]2[]3[1,2]4[]5[2,3]6[1,2,3]7[3,4]8[]9[1,2,3,4] [4,5]10[1,2,3,4]100[9,10,11,12,13,14,15,16] [18,19,20,21,22]解题思路双指针法:相当于有一个窗口,指针在窗口...原创 2020-02-24 16:47:33 · 121 阅读 · 0 评论 -
【牛客网】选择题知识点
计算机网络1、直接封装RIP、OSPF、BGP报文的协议分别是UDP、IP、TCP 。RIP是一种分布式的基于距离向量的路由选择协议,通过广播UDP报文来交换路由信息。OSPF是一个内部网关协议,不使用传输协议,如UDP或TCP,而是直接用IP包封装它的数据。BGP是一个外部网关协议,用TCP封装它的数据。2、FDDI采用( 令牌环网 )协议标准。FDDI是目前成熟的LAN技术中...原创 2020-02-18 18:25:24 · 1613 阅读 · 0 评论 -
【剑指offer23】二叉搜索树、平衡二叉树、满二叉树和完全二叉树
二叉搜索树二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:若其左子树存在,则其左子树中每个节点的值都不大于该节点值;若其右子树存在,则其右子树中每个节点的值都不小于该节点值。平衡二叉树平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超...原创 2020-02-14 23:57:57 · 137 阅读 · 0 评论 -
【剑指offer22】python遍历二叉树
一、前序遍历、中序遍历和后序遍历使用递归方法,只需改变返回数据顺序即可class Solution: def preorderTraversal(self, root): ##前序遍历 """ :type root: TreeNode :rtype: List[int] """ if not root:...原创 2020-02-11 18:27:04 · 179 阅读 · 0 评论 -
【剑指offer15】python定义单链表
定义一个结点类class ListNode: def __init__(self, x): self.val = x self.next = None定义单链表单链表是在结点类的基础上,由一个一个结点构成。链表知道头结点就能获取所有的节点。r指向头结点,p逐个指向后续节点。initList得到每个结点的地址,printlist得到节点的值。c...原创 2020-02-09 22:42:02 · 254 阅读 · 0 评论 -
牛客网剑指offer知识点归纳
牛客网剑指offer知识点归纳replace()方法str.replace(old, new[, max])实例:str = "this is string example....wow!!! this is really string";print str.replace("is", "was");print str.replace("is", "was", 3);结果:thw...原创 2020-01-18 23:13:41 · 246 阅读 · 0 评论