LeetCode
LeetCode & 剑指offer
Jeremy_lf
知所先后
展开
-
【剑指offer】22—树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:第一步:在树A中找到和树B的节点一样的节点R第二部:判断树A以R为根节点的子树是不是包含树B一样的结构# class TreeNode:# def __init__(self, x):# self.val = x# self.left = ...原创 2020-04-30 21:26:41 · 140 阅读 · 0 评论 -
【剑指offer】21—栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:建立一个辅助栈,然后依次将入栈元素压入,如果栈顶元素等于出栈序列,则循环判断,最...原创 2020-04-30 20:08:19 · 136 阅读 · 0 评论 -
【LeetCode】链表相关问题
1.翻转链表# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回ListNode def ReverseList(self, pHead): # write code here last = None while pHead: tmp =原创 2020-07-18 12:50:39 · 235 阅读 · 0 评论 -
【LeetCode】二叉树相关问题
DFS 遍历使用递归def dfs(TreeNode root) { if (root == None) { return; } dfs(root.left) dfs(root.right)}BFS 遍历使用队列数据结构def bfs(TreeNode root): queue = [] queue.append(root) while len(queue) > 0 node = queue.pop();原创 2020-07-12 18:55:52 · 363 阅读 · 0 评论 -
【LeetCode刷题】8 字符串转换整数 || 10 正则表达式匹配
题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效原创 2020-06-20 22:17:19 · 371 阅读 · 1 评论 -
【剑指offer】23—删除链表中的重复节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5方法一在遍历的时候,记录上一个不重复的节点pPre,当前节点pThis,下个节点pNext。在遍历pThis的时候如果当前节点pThis的值跟后面的几个节点数值相同,需要找到下个不同的节点,删除重复节点,更新pPre和pThis;如果前节点pThis的值跟后面的节点数值不同原创 2020-05-18 01:00:57 · 180 阅读 · 0 评论 -
【剑指offer】20—顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.思路:定义四个变量,表示左上和右下的打印范围,一次旋转打印结束后,往对角分别前进和后退一个单位。def printMatrix(...原创 2020-04-29 14:35:04 · 123 阅读 · 0 评论 -
百度网易华为2020年春招算法岗笔试题
百度:一个mxn的矩阵,矩阵中每个元素为i*j mod 10。然后用axb的卷积核去池化,求池化后的元素之和A = list(map(int,input().split()))n = A[0]m = A[1]a = A[2]b = A[3]res = [[0 for _ in range(m)] for _ in range(n)]for i in range(1,n+1): ...原创 2020-04-26 12:24:10 · 769 阅读 · 0 评论 -
快速幂详解及其Python实现
快速幂传统的幂运算,是对底数进行连乘,时间复杂度为o(n),例如:2^ 13 = 2* 2 * 2……*2,连乘十三次。但是我们可以通过增加底数,减少指数的做法,降低时间复杂度。从而能够实现复杂度为o(logn)的幂运算。还是以2^13为例,13的二进制为1101,因此2的13次方可以分解成以下形式:和13的二进制1101相对比,只要二进制为1的位,就有权重,权重为2^(i-1),i表示第几...原创 2020-04-26 00:48:50 · 3543 阅读 · 1 评论 -
【剑指offer】19—包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。链接:https://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49?answerType=1&f=d...原创 2020-04-25 00:02:52 · 135 阅读 · 0 评论 -
【剑指offer】18—变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution: def jumpFloorII(self, number): #f(2)=2;f(3)=2f(2)=2*2 if number <=1: return n...原创 2020-04-24 23:55:08 · 149 阅读 · 0 评论 -
【剑指offer】17—重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:根据中序遍历和前序遍历可以确定二叉树,具体过程为:1、根据前序序列第一个结点确定根结点;2、根据根结点在中序序列中的位置分割出左右两个子序列;...原创 2020-04-23 14:09:30 · 126 阅读 · 0 评论 -
【剑指offer】16—把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。方法一:利用内置函数实现全排列,然后找出最小值class Solution: def PrintMinNumber(self, numbers): # write code here ...原创 2020-04-23 12:53:11 · 138 阅读 · 0 评论 -
【LeetCode刷题】3 无重复最长子串 || 4 寻找两个数组的中位数
3、无重复最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:用一个字符串和一个字符串长度来记录所有可能的情况。class Solution(object): def lengthOfLongestSubstring(self, s):...原创 2020-04-21 23:07:56 · 152 阅读 · 0 评论 -
【LeetCode之动态规划】5-最长回文字符串
最长回文字符串方法一:暴力匹配 (Brute Force)1、根据回文子串的定义,枚举所有长度大于等于 22 的子串,依次判断它们是否是回文;2、在具体实现时,可以只针对大于“当前得到的最长回文子串长度”的子串进行“回文验证”;3、在记录最长回文子串的时候,可以只记录“当前子串的起始位置”和“子串长度”,不必做截取。这一步我们放在后面的方法中实现。class Solution: ...原创 2020-04-21 14:03:37 · 231 阅读 · 0 评论 -
【剑指offer】15—数组中出现次数超过一半的元素
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。方法一:利用字典,记录每个元素的个数,然后判断最大值得2倍是否大于给定的数字,如果大于,返回相应的键,否则返回0。class Solution: def MoreTha...原创 2020-04-17 00:40:01 · 168 阅读 · 0 评论 -
【剑指offer】14-字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。方法一:递归法,问题转换为先固定第一个字符,求剩余字符的排列;求剩余字符排列时跟原问题一样。遍历字符串,固定可能出现在第一个位置的字符,作为第一个字符,后面剩下的字符串的组合用递归使用本函数的方式得到。class...原创 2020-04-17 00:21:57 · 123 阅读 · 0 评论 -
【LeetCode刷题】41 缺失的第一个正数 || 46 全排列
41、缺失的第一个正数给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1本题是一道纯算法题,和数据结构无关,而且题目中的说明几乎把算法给限定死了。这个思路也很巧妙,对于一个正数number,我们将其放在数组nums中第numb...原创 2020-04-15 11:50:00 · 214 阅读 · 0 评论 -
【LeetCode刷题】46 全排列 || N!的零的个数
46、全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]‘’’方法一:直接利用库函数class Solution: def permute(self, nums): import itertools ...原创 2020-04-13 23:05:33 · 280 阅读 · 0 评论 -
【剑指offer】13-最小的k个数
最小的k个数输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:可以先利用排序算法进行排序,然后取出k个最小的数。排序算法有冒泡、选择、堆排序、归并、快排等,为了练习这种排序算法,我们用这些算法一一求解本题。class Solution: def GetLeastNumbers_Solution(self, ...原创 2020-04-13 20:40:30 · 101 阅读 · 0 评论 -
【动态规划】两个字符串的最长公共子串和子序列
题目描述:解题思路:利用动态规划,遍历比较两个字符是否相等,如果相等,则标记为1,并存储。显而易见,相邻字符之间对角线元素之和的最大就是最长公共子串。def LCstring(string1,string2): len1 = len(string1) len2 = len(string2) res = [[0 for i in range(len1+1)] for ...原创 2020-04-11 15:11:14 · 1163 阅读 · 1 评论 -
【剑指offer】12-两个链表的第一个公共节点
两个链表的第一个公共节点输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路:首先我们要知道什么是公共节点,两个链表从某一节点开始,他们的next都指向同一个节点。但由于是单向链表的节点,每个节点只有一个next,因此从第一个公共节点开始,之后他们的所有节点都是重合的,不可能再出现分叉。所以可以先遍历两个链表得...原创 2020-04-11 14:26:28 · 102 阅读 · 0 评论 -
【剑指offer】11-合并两个有序链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回合并后列表 def Merge(self, ...原创 2020-04-08 14:51:06 · 129 阅读 · 0 评论 -
【LeetCode刷题】300 最长上升子序列
300、最长上升子序列题目描述:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4思路:利用动态规划用dp[i] 表示 从下标0 到下标i 的最长上升子序列的长度,例如对于样例输入[10,9,2,5,3,7,101,18], 有 dp = [ 1, 1, 1, 2, 2, 3, 4, 4]。显然dp[0] = ...原创 2020-04-07 00:39:48 · 149 阅读 · 0 评论 -
【剑指offer】10-剪绳子
剪绳子给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。方法一:动态规划动态规划求解问题的四个特征:①求一个问题的最优解;②整体的问题的最优...原创 2020-04-06 00:23:58 · 264 阅读 · 0 评论 -
【剑指offer】9-用两个栈实现队列
用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析(来源牛客)队列的特性是:“先入先出”,栈的特性是:“先入后出”当我们向模拟的队列插入数 a,b,c 时,假设插入的是 stack1,此时的栈情况为:栈 stack1:{a,b,c}栈 stack2:{}当需要弹出一个数,根据队列的"先进先出"原则,a 先进入,则 a 应该先弹出。...原创 2020-04-05 18:01:11 · 168 阅读 · 0 评论 -
【剑指offer】8-旋转数组的最小数字
旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。方法一:无任何意义,直接对数组求最小值class Solution: def minNumbe...原创 2020-04-05 17:10:27 · 110 阅读 · 0 评论 -
【剑指offer】7-链表中倒数第k个节点
链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个结点。思路:由于链表只能从前往后遍历,所以我们可以先求出链表的总长度N,然后利用第N-k个节点就是我们需要的来解决。首先,统计链表的长度有两种方法,循环或者递归。分别如下: #循环方式实现 def getSingleLinkedListNodeCount(self,node): if node == No...原创 2020-04-04 22:12:58 · 107 阅读 · 0 评论 -
【剑指offer】6-反转链表
反转链表输入一个链表,反转链表后,输出新链表的表头。思路:首先将原链表的第一个节点变成了新链表的最后一个节点,同时将原链表的第二个节点保存在cur中。循环反转,就是从原链表的第二个节点开始遍历到最后一个节点,将所有节点翻转一遍# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self...原创 2020-04-04 21:00:55 · 126 阅读 · 0 评论 -
【LeetCode刷题】67 二进制求和 || 69 X的平方根
67、二进制求和给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”方法一:首先把两个字符串通过补零的方式对齐,然后进行相加,如果是有进位的,则记录,最后判读最高位是否有进位即可。cl...原创 2020-04-01 16:25:27 · 239 阅读 · 0 评论 -
【LeetCode刷题】53 最大字序和 || 60 第k个排列
53、最大字序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和示例 1:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。暴力法def Maxarray(nums): maxnum = max(nums) for i in range(len...原创 2020-03-29 16:10:55 · 175 阅读 · 0 评论 -
【LeetCode刷题】209 长度最小的子数组
题目描述:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。方法一:class Solution(object): def minSubAr...原创 2020-03-29 16:05:20 · 173 阅读 · 0 评论 -
【LeetCode刷题】14 最长公共前缀 || 58 最后一个单词长度
14、最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。class Solution(object): def longestComm...原创 2020-03-26 00:20:02 · 133 阅读 · 0 评论 -
【剑指offer】5-从尾到头打印链表
题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。栈可以使用栈结构,从头到尾遍历链表放入栈中,根据栈先入后出的性质,可以实现将链表从尾到头返回。在python中可以用列表结构来实现栈的功能。# class ListNode:# def __init__(self, x):# self.val = x# self.next ...原创 2020-03-25 15:05:32 · 98 阅读 · 0 评论 -
阿里巴巴2020算法实习生笔试题目及解法
题目描述:从n个人中选出一部分人,然后,在这一部分人中选一个队长,共有多少种选法?其实就是一个排列组合的问题,组合各种可能,然后在组合好的人选里选择一个数。num = int(input())b =[]a =''for n in range(1,num+1): b.append(n)for i in b: a += ''.join(str(i))import ...原创 2020-03-23 20:51:43 · 1468 阅读 · 0 评论 -
【动态规划】最短路径上元素之和最小
给定一个二维数组,从左上角到右下角的所有路径中,找出元素和或乘积最小的路径。def best_path(A): b=[A[0][0]] i = 0 j = 0 while i<len(A)-1 and j<len(A[0])-1: if A[i+1][j] == A[i][j+1]: if A[i+2][j] ...原创 2020-03-23 16:54:09 · 243 阅读 · 0 评论 -
【LeetCode刷题】70 爬楼梯 || 62 不同路径
70、爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。#递归class Solution1(object): def climbStair...原创 2020-03-23 15:30:19 · 252 阅读 · 0 评论 -
【剑指offer】4-替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。Python实现class Solution: # s 源字符串 def replaceSpace(self, s): s = s.split(' ') return '%20'...原创 2020-03-20 20:39:29 · 125 阅读 · 0 评论 -
【剑指offer】3-跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:首先可知,第一阶有只能一步,一种;第二阶可以两次一步、一次两步两种;当n = 3 时,有3种跳法;当n很大时,青蛙在最后一步跳到第n级台阶时,有两种情况:一种是青蛙在第n-1个台阶跳一个台阶,那么青蛙完成前面n-1个台阶,就有f(n-1)种跳法,这是...原创 2020-03-20 20:37:11 · 106 阅读 · 0 评论 -
【剑指offer】2-二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间复杂度:O(n^2)空间复杂度:O(1)'''class Solution: # array 二维列表 def Find(self, target, array): ...原创 2020-03-19 16:35:39 · 82 阅读 · 0 评论