- 博客(57)
- 收藏
- 关注
原创 [剑指Offer] 构建乘积数组(Python)
题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。思路上下三角分别连乘代码# -*- coding:utf-8 -*-class Solution: def multiply(self, A): # w...
2018-06-05 22:50:10 483
原创 [剑指Offer] 表示数值的字符串(Python)
题目描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。思路递归实现。将左右子数连接起来,我们需要得到每棵子树的头节点和尾节点。头节点就是根节点。尾节点依次可能是右子树的尾结点(若右子树不空),左子树...
2018-06-05 22:27:34 1009
原创 [剑指Offer] 二叉树的下一个结点(Python)
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路分情况依次判断。 1. 若给定结点为空节点,则返回空 2. 若给定结点有右子树,则将结点指向右子树的根节点,然后找到其最左边的叶节点并返回 3. 若给定结点没有父节点,则返回空 4. 若给定结点有父节点,若给定结点是其父节点的...
2018-06-05 18:35:51 896 1
原创 [剑指Offer] 翻转单词顺序序列(Python)
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路思路...
2018-06-05 17:41:59 2014
原创 [剑指Offer] 求1+2+3+...+n(Python)
题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路思路一:Python语言特性 思路二:递归 + 逻辑与的短路特性代替if语句代码#思路一# -*- coding:utf-8 -*-class Solution: def Sum_Solution(sel...
2018-06-04 23:17:37 1908
原创 [剑指Offer] 数组中重复的数字(Python)
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路思路一:用Bool数组存放flag 思路二:从下标0开始,对每个元素,若numbers[i]不等于i...
2018-06-04 20:21:25 3055
原创 [剑指Offer] 把数组排成最小的数(Python)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路先将整数数组转为字符串数组,然后用比较器实现字符串比较大小。如果有字符串A和B, A + B < B + A,则A在前;反之B在前。最后将字符串数组连接去除返回值左侧的0。代码#...
2018-06-04 16:22:20 2550
原创 [LintCode 32] Minimum Window Substring(Python)
题目描述 Given a string source and a string target, find the minimum window in source which will contain all the characters in target. Notice If there is no such window in source that covers all
2017-11-14 20:41:57 391
原创 [LintCode 406] Minimum Size Subarray Sum(Python)
题目描述 Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn’t one, return -1 instead. 样例 Given the array [2,3,1
2017-11-13 11:25:09 481
原创 [LintCode 697] Check Sum of Square Numbers(Python)
题目描述 Given a integer c, your task is to decide whether there’re two integers a and b such that a^2 + b^2 = c. 样例 Given n = 5 Return true // 1 * 1 + 2 * 2 = 5 Given n = -5 Return false
2017-10-28 21:31:53 413
原创 [LintCode 363] 接雨水(Python)
题目描述 Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. 样例 如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2
2017-09-20 18:08:26 710
原创 [LintCode 383] 装最多水的容器(Python)
题目描述 给定 n 个非负整数 a1, a2, …, an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。 注意事项 容器不可倾斜。 样例 给出[1,3,2], 最大的储水面积是2.思路两侧不断向一起逼近。每次计算面积为横坐标之差乘
2017-09-20 14:58:09 453
原创 [LintCode 107] 单词切分(Python)
题目描述 给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。 样例 给出 s = “lintcode” dict = [“lint”,”code”] 返回 true 因为”lintcode”可以被空格切分成”lint code”思路动规思想。代码class Solution: """ @param: s: A
2017-09-20 14:23:17 1201
原创 [LintCode 104] 合并k个排序链表(Python)
题目描述 合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。 样例 给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null思路两两合并,如果是奇数,余出来的直接加在最后。代码"""Definition of ListNodeclass ListNode(object): def __init__(self
2017-09-19 21:05:54 761
原创 [LintCode 98] 链表排序(Python)
题目描述 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。 样例 给出 1->3->2->null,给它排序变成 1->2->3->null.思路归并法:找到链表的中点分治排序再归并。快排法:把头节点当做基准,分治为小于基准的链表,等于基准的链表和大于基准的链表。最后连起来。代码"""Definition of ListNodeclass ListN
2017-09-19 17:45:45 4510
原创 [LeetCode 204] Count Primes(Python)
题目描述 Count the number of prime numbers less than a non-negative number, n.思路开辟一个辅助数组,依次标记2−n√2-\sqrt n的所有倍数。最后遍历该数组,计数素数。代码class Solution(object): def countPrimes(self, n): """ :
2017-09-18 18:13:06 931
原创 [LintCode 41] 最大子数组之和(Python)
题目描述 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 注意事项 子数组最少包含一个数 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6思路遍历数组,记录从第一个元素加到当前元素的和,并更新最大和。如果该值小于0,说明会对后续和产出负面影响(负数会让后面的加和变小),则把该值置为0
2017-09-07 15:38:46 1130
原创 [LintCode 124] 最长连续序列(Python)
问题描述 给定一个未排序的整数数组,找出最长连续序列的长度。 说明 要求你的算法复杂度为O(n) 样例 给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4思路用一个字典存储中间值。遍历数组,对于数字i,找到i-1和i+1对应的value值,如果不存在则记0。然后把i的value值设为i-1,i+1的va
2017-09-06 17:38:02 4124
原创 [LintCode 186] 最多有多少个点在一条直线上(Python)
题目描述 给出二维平面上的n个点,求最多有多少点在同一条直线上。 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3)。思路借助辅助二维数组,存储每两点之间的斜率和截距。代码# Definition for a point.# class Point:# def __init__(self, a=0, b=0):# sel
2017-09-05 14:19:01 1571 1
原创 [LintCode 78] 最长公共前缀(Python)
思路描述 给k个字符串,求出他们的最长公共前缀(LCP) 样例 在 “ABCD” “ABEF” 和 “ACEF” 中, LCP 为 “A”思路法一:用python的zip函数解决法二:两两比较代码class Solution: """ 法一:使用zip函数 @param: strs: A list of strings @return:
2017-09-05 10:51:32 1242
原创 [LintCode 419] 罗马数字转整数(Python)
题目描述给定一个罗马数字,将其转换成整数。 返回的结果要求在1到3999的范围内。说明 什么是 罗马数字? https://en.wikipedia.org/wiki/Roman_numerals https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97 http://baike.baidu.com/view/42
2017-09-05 10:11:17 1088
原创 [LintCode 200] 最长回文字符串(Python)
题目描述给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。样例 给出字符串 “abcdzdcab”,它的最长回文子串为 “cdzdc”。思路遍历字符串,假设把当前遍历到的元素当做回文中间数。当最长回文长度是偶数的,那么中间数应该和下个数相等,然后其余的数都对称相等;当最长回文长度是奇数的,那么其余的数应都对称相等。代码class Solutio
2017-09-04 20:22:11 725
原创 [LintCode 12] 带最小值操作的栈(Python)
题目描述实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。注意事项 如果堆栈中没有数字则不能进行min方法的调用样例 如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1思路push,pop操作都很简单,用一个
2017-09-04 17:53:22 697
原创 [LintCode 57] 三数之和(Python)
题目描述给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。注意事项 在三元组(a, b, c),要求a <= b <= c。 结果不能包含重复的三元组。样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是: (-1, 0, 1) (-1, -1, 2)思路先对序列排序。因为要找三个数,每次遍历固定一个元素
2017-09-04 17:29:56 1185
原创 [LintCode 102] 带环链表(Python)
题目描述给定一个链表,判断它是否有环。样例 给出 -21->10->4->5, tail connects to node index 1,返回 true思路快慢针。快针每次都两步,慢针每次走一步。如果无环,快针肯定会率先到达队尾,即遇到None。如果有环,快针永远无法遇到None,并且会与慢针相遇。代码"""Definition of ListNodeclass ListNode(objec
2017-09-04 17:13:08 473
原创 [LintCode 384] 最长无重复字符的子串(Python)
题目描述给定一个字符串,请找出其中无重复字符的最长子字符串。样例 例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。 对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。思路遍历字符串中的每一个元素。借助一个辅助键值对来存储某个元素最后一次出现的下标。用一个整形变量存储当前无重复字符的子串开始的下标。代码class Solution:
2017-09-04 17:02:41 10275 1
原创 Python列表排序函数
sort函数原地排序,直接改变输入的列表,而无返回值。x = [2, 1, 3]x.sort()print x# output: [1, 2, 3]print x.sort()# output: None若要实现赋值,则先把x的副本(一个新对象)赋值给一个变量,再排序,这样可以保证不改变x。x = [2, 1, 3]y = x[:] # 或 y = list(x)y.sort()p
2017-08-31 19:24:00 4264
原创 [LintCode 197] 排列序号(Python)
题目描述给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。样例 例如,排列 [1,2,4] 是第 1 个排列。思路例如排序[1, 4, 2]。 1的后面有 2!2! 种排列;4的后面有 1!1! 种排列;2的后面有 0!0! 种排列。 1的后面有0个数比它小;4的后面有1个数比它小;2的后面有0个数比它小。 index=2!∗0+1!∗1+0!∗
2017-08-30 19:59:09 1128
原创 [LintCode 177] 把排序数组转换为高度最小的二叉搜索树(Python)
题目描述给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。注意事项 There may exist multiple valid solutions, return any of them.样例 给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7思路排序二叉树的特点就是根节点的值大于左
2017-08-30 19:14:13 286
原创 [LeetCode 97] Interleaving String(Python)
题目描述 Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 = “aabcc”, s2 = “dbbca”, When s3 = “aadbbcbcac”, return true. When s3 =
2017-08-30 18:19:04 274
原创 [LintCode 138] 子数组之和(Python)
题目描述 给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置 注意事项 There is at least one subarray that it’s sum equals to zero. 样例 给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].思路用一个字典存储中间结果。key为从第一个元素到当
2017-08-30 17:21:58 606
原创 [LintCode 109] 数字三角形(Python)
题目描述给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。注意事项 如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。样例 比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。思路
2017-08-30 14:46:48 3288
原创 [LintCode 480] 二叉树的所有路径(Python)
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。样例 给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]思路递归法。用一个数组来存储路径。然后递归遍历左右子树,把所有路径加进来。递归结束的条件是遇到叶节点,
2017-08-29 15:41:49 3500 1
原创 [LintCode 376] 二叉树的路径和(Python)
题目描述 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。 一个有效的路径,指的是从根节点到叶节点的路径。样例 给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]代码"""Definition of TreeNode:class TreeNode:
2017-08-29 11:14:43 2360
原创 [LintCode 453] 将二叉树拆成链表(Python)
题目描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。思路递归实现。将左右子数连接起来,我们需要得到每棵子树的头节点和尾节点。头节点就是根节点。尾节点依次可能是右子树的尾结点(若右子树不空),左子树的尾结点(若左子树
2017-08-25 18:04:58 819
原创 [LeetCode 415] Add Strings(Python)
题目描述 Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2. Note: 1.The length of both num1 and num2 is < 5100. 2.Both num1 and num2 contains
2017-08-25 16:14:36 720
原创 [排序] 归并排序(Python)
思想归并排序就是利用分治思想,合——分——合,把两个有序的子数组合并为一个有序数组,合并的策略就是比较两个子数组中还未参与排序部分的头元素,把较小的元素加进来。归并排序是稳定的排序。示例对序列[7,6,4,3,1,2,8,5]按升序排列。 合——分: [7,6,4,3,1,2,8,5] -> [7,6,4,3],[1,2,8,5] -> [7,6],[4,3],[1,2],[8,5] -> [7
2017-08-23 20:14:45 344
原创 [LintCode 539] 移动零(Python)
题目描述 给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序 注意事项 1.必须在原数组上操作 2.最小化操作数 样例 给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].思路快慢针。快针遍历数组,遇到非0数时把值赋给慢针,慢针下标加一。快针遍历结束后,如果慢
2017-08-23 12:22:16 277
原创 [LintCode 514] 栅栏染色(Python)
题目描述我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。 必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。(n和k都是非负整数)样例 n = 3, k = 2, return 6 思路动态规划问题。设f(i)f(i)为共ii个柱子的方案数。对于第ii个柱子,它有22种可能:和第i−1i -1个柱子颜色相同,和第i−1i-1个柱子颜色不同。则共ii个柱子的方案数为
2017-08-23 11:11:46 754
原创 [LintCode 433] 岛屿的个数(Python)
题目描述 给一个01矩阵,求不同的岛屿的个数。 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。 样例 在矩阵: [ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0,
2017-08-22 17:53:42 2962 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人