数据结构与算法
佛系调参
这个作者很懒,什么都没留下…
展开
-
leetcode300--最长上升子序列LIS
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。法1:动态规划参考:动态规划 + 贪心算法(二分法)(Python 代码、...原创 2019-08-24 14:38:50 · 164 阅读 · 0 评论 -
剑指offer-数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。#解法一:利用字典。时间和空间复杂度都是O(n)class Solution: # 这里要特别注意~找到任...原创 2019-03-23 23:23:16 · 108 阅读 · 0 评论 -
剑指offer50-第一次只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).注意:因为题目要求返回字符(或者字符出现的位置),一次第二次遍历是也是字符串s,而不是哈希表#方法一:利用数组自己建立个哈希表class Solution: def FirstNotRepeatingCha...原创 2019-03-23 21:36:40 · 140 阅读 · 0 评论 -
剑指offer-数值的整数次方python
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解法一:直接乘class Solution: def Power(self, base, exponent): # write code here res=1 if exponent>0: wh...原创 2019-04-03 22:54:52 · 171 阅读 · 0 评论 -
剑指offer-链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。思路:两个指针,一个指针先走k步,然后两个一起走、# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def Find...原创 2019-03-22 23:36:43 · 82 阅读 · 0 评论 -
剑指offer-反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。#解法1:利用数组# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNode de...原创 2019-03-22 22:06:14 · 95 阅读 · 0 评论 -
剑指offer-调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution: def reOrderArray(self, array): # write code here even,odd=[],[] ...原创 2019-03-22 21:34:14 · 79 阅读 · 0 评论 -
leetcode543-二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:两结点之间的路径长度是...原创 2019-03-18 22:43:09 · 134 阅读 · 0 评论 -
leetcode463-Island Perimeter岛屿的周长
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。示例...原创 2019-03-21 21:27:52 · 156 阅读 · 0 评论 -
leetcode733-图像渲染
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标(sr, sc)表示图像渲染开始的像素值(行 ,列)和一个新的颜色值newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与...原创 2019-03-21 20:28:44 · 226 阅读 · 0 评论 -
leetcode872-叶子相似的树
请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个叶值序列。举个例子,如上图所示,给定一颗叶值序列为(6, 7, 4, 9, 8)的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是叶相似的。如果给定的两个头结点分别为root1和root2的树是叶相似的,则返回true;否则返回false。# Definition for ...原创 2019-03-21 19:57:00 · 130 阅读 · 0 评论 -
leetcode867-转置矩阵
给定一个矩阵A,返回A的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]解法一:初始化一个新的矩阵来保存答案。尺寸为R x C的矩阵A转置后会得到尺寸为C x R的矩阵ans,对此有ans[c][r] = A[...原创 2019-03-13 11:35:25 · 204 阅读 · 0 评论 -
剑指offer-链表中环的入口节点 python
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路:确定一个链表中是否存在环,用快慢指针法:走的快的指针追上了走得慢的指针,则存在环 得到环中节点的数目。两个指针相遇的节点一定位于环内,可以从这个相遇的节点出发,一边移动一边计数直到再次回到该节点 找到环的入口:两个指针p1,p2都先指向表头,如果链表中的环有n个节点,则指针p1先移动n步,然后两个指针一相同...原创 2019-04-04 22:00:26 · 213 阅读 · 0 评论 -
剑指offer-对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:针对前序遍历定义一种对称的前序遍历算法:先遍历父节点,再遍历它的右子节点,最后遍历它的左子节点python:# class TreeNode:# def __init__(self, x):# self.val = x# ...原创 2019-04-05 16:22:18 · 91 阅读 · 0 评论 -
剑指offer-树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)pythonclass Solution: def HasSubtree(self, pRoot1, pRoot2): # write code here result=False if pRoot1 and pRoot2: ...原创 2019-04-05 16:44:21 · 94 阅读 · 0 评论 -
0-1背包详细解析及python实现
n件商品数量,限制的最大重量(capacity)是c,物品的重量数组是w,商品价值数组是v,求能取得的最大价值动态规划解法:构建二维数组:每一行代表一个物品,并添加全0的第一行,代表没有商品,因此实际是n+1行;每一列代表当前背包的容量,共c+1列(0,1,...,c) 状态转移矩阵:原始形式是:if w[i] > j: #如果第i件物品太重,背包已放不下 dp[i...原创 2019-08-07 11:05:31 · 992 阅读 · 0 评论 -
leetcode15-三数之和
给定一个包含 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...原创 2019-07-12 14:51:12 · 103 阅读 · 0 评论 -
剑指offer-字符串的排列 python
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:循环遍历每个字符,让每个字符打头,然后继续递归遍历其余的字符因为可能有字符重复,所以最后用到set()因为要按字典序...原创 2019-07-16 11:31:54 · 156 阅读 · 0 评论 -
剑指offer-丑数 python
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。class Solution: def GetUglyNumber_Solution(self, index): # write code here if...原创 2019-05-27 22:35:39 · 108 阅读 · 0 评论 -
剑指offer-旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:二分查找class Solution: def minNumberInRotateArr...原创 2019-04-02 22:09:56 · 114 阅读 · 0 评论 -
华为笔试题-明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。InputParamn...原创 2019-04-02 17:39:38 · 215 阅读 · 0 评论 -
快速排序 python
实现思路:两个指针left,right分别指向列表的第二个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素list[0],称为pivotvalue 然后left指向的值先和参考值pivotvalue进行比较,若list[left]小于或等于pivotvalue值,left就一直向右移动,left+1,直到移动到大于pivotvalue值的地方,停住 right指向的值和参...原创 2019-04-01 22:01:02 · 123 阅读 · 0 评论 -
剑指offer-用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:stack1用于存放push的元素 从stack2中pop元素class Solution: def __init__(self): self.stack1=[] self.stack2=[] def push(se...原创 2019-04-01 19:25:34 · 129 阅读 · 0 评论 -
剑指offer-重建二叉树 python
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。class Solution: # 返回构造的TreeNode根节点 def reConstructBinaryTree(s...原创 2019-04-01 18:55:19 · 184 阅读 · 0 评论 -
剑指offer-顺时针打印矩阵python
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.python:class Solution: # matrix类型为二维列表,需要返回列表 def pr...原创 2019-04-05 22:05:28 · 153 阅读 · 0 评论 -
leetcode231-2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例1:输入: 1输出: true解释: 20= 1示例 2:输入: 16输出: true解释: 24= 16思路一:2的幂对2取余数应该为0,循环递减nclass Solution(object): def isPowerOfTwo(self, n): """ ...原创 2019-03-12 21:51:29 · 180 阅读 · 0 评论 -
删除重复字符串
解法:python 函数灵活运用O(n)import syss=sys.stdin.readline().strip() #s="banana"result=""for item in s: if item not in result: result = result + itemprint(result)类似题目:删除重复单词import s...原创 2019-03-11 22:22:55 · 1426 阅读 · 0 评论 -
leetcode345-反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: "hello"输出: "holle"示例 2:输入: "leetcode"输出: "leotcede"说明:元音字母不包含字母"y"。思路:题目说了“反转”,那就用栈喽。但要同时保持元音字母的索引位置和字母值两个class Solution: def reverseVowe...原创 2019-03-15 09:52:17 · 106 阅读 · 0 评论 -
leetcode14-Longest Common Prefix最长公共前缀
方法一: class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs:return "" s1=min(strs) s2=max(strs) for i,c in enu...原创 2019-02-25 20:05:32 · 215 阅读 · 0 评论 -
leetcode203-Remove Linked List Elements移除链表元素(python)
思路:不用设置两个外部引用,可以每次检查当前节点的下一个节点的值是否等于给定值# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: d...原创 2019-03-01 16:58:07 · 201 阅读 · 0 评论 -
leetcode111-Minimum Depth of Binary Tree二叉树的最小深度
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def minDepth(s...原创 2019-02-23 16:50:28 · 112 阅读 · 0 评论 -
leetcode26-Remove Duplicates from Sorted Array 删除排序数组中的重复项-python
思路:因为是有序数组,所以直接和前一个元素比较就行了,不用从0位开始比较 :class Solution: def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ i=1 while i &...原创 2019-01-22 21:57:36 · 121 阅读 · 0 评论 -
leetcode21-合并两个有序链表
解题思路:构造一个数值(val)为0的节点(ListNode) newhead=pre(pre后面改变了,所以要多一个外部引用newhead) 比较输入的两个链表头部l1,l2的数值大小,将pre链接到其中数值小的节点,并且其中数值小的节点更新为其右边(前面)一个节点; 将节点pre更新为pre右边一个节点 只要l1,l2不为None,循环2,3步骤 循环结束后剩下的节点是数值大的...原创 2019-01-16 21:16:26 · 114 阅读 · 0 评论 -
leetcode20-有效的括号
class Solution: def isValid(self, s): """ :type s: str :rtype: bool """ # The stack to keep track of opening brackets. stack = [] # H...原创 2019-01-16 16:54:55 · 100 阅读 · 0 评论 -
leetcode155-min stack最小栈 python
思路: 采用两个栈,且两个栈长度相同self.result栈中存放元素 self.min栈中存放每次添加元素时result栈中元素的最小值。result栈和mi栈长度相同 注意:本方法采用两个栈长度相同的策略,即min栈中存放的是result栈中添加或删除元素后result栈中的最小值。若采用min栈中只存放最小值(遇到大的值min栈不更新),则此时MinStack.pop()不好...原创 2019-01-18 13:17:47 · 203 阅读 · 0 评论 -
leetcode83-删除排序链表中的重复元素-python
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteDuplicates(self, head): ...原创 2019-01-17 18:42:45 · 259 阅读 · 0 评论 -
leetcode9-回文数 python
方法一:转化为字符串,然后反转 O(n)class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x<0: return False else: ...原创 2019-01-17 16:29:40 · 285 阅读 · 0 评论 -
leetcode7-整数反转
思路:采用反转字符串的方法,即将整数转化为字符串即可x=str(x)。 对于数组范围溢出在最后加个简单判断即可。 另一种思路:采用pop=x%10,x=x /10,利用栈进行反转求解class Solution: def reverse(self, x): """ :type x: int :rtype: int ...原创 2019-01-17 16:11:18 · 127 阅读 · 0 评论 -
leetcode1-两数之和
思路:1.使用暴力,两遍循环数组;2.使用哈希表(字典),一遍循环即可。将数作为key,对应的索引作为value。注意a[b]!=i条件的限制class Solution: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int...原创 2019-01-17 15:18:17 · 154 阅读 · 0 评论 -
leetcode20-Valid Parentheses有效的括号
利用栈编程方式一:按照课本上思路改写的class Solution: def isValid(self, s: str) -> bool: map={'(':')','[':']','{':'}'} match=True i=0 stack=[] while i<len(s) and ...原创 2019-02-25 21:26:38 · 134 阅读 · 0 评论