![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
yurenguowang
这个作者很懒,什么都没留下…
展开
-
[剑指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 · 463 阅读 · 0 评论 -
[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 · 736 阅读 · 0 评论 -
[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 · 4480 阅读 · 0 评论 -
[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 · 916 阅读 · 0 评论 -
[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 · 1104 阅读 · 0 评论 -
[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 · 272 阅读 · 0 评论 -
[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 · 255 阅读 · 0 评论 -
[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 · 585 阅读 · 0 评论 -
[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 · 3275 阅读 · 0 评论 -
[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 · 1100 阅读 · 0 评论 -
[排序] 归并排序(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 · 310 阅读 · 0 评论 -
[排序] 冒泡排序(Python)
思想依次比较相邻两元素的大小,顺序与要求的不一致就交换。这样会把待排序序列中的最大(最小)元素不断”浮”到最右端,最终完成升序或降序排列。示例对序列 [2, 4, 1, 3, 6, 5] 按升序排列(只记录有交换发生的循环)。第一次循环: [2, 4, 1, 3, 6, 5] –> [2, 1, 4, 3, 6, 5] –> [2, 1, 3, 4, 6, 5] –> [2, 1, 3, 4, 5原创 2017-08-08 16:07:58 · 340 阅读 · 0 评论 -
[剑指Offer 37] 两个链表的第一个公共节点(Python)
题目描述输入两个链表,找出它们的第一个公共结点。思路两个有公共节点的链表是Y字型的结构,自公共节点后是重合的。可以借助两个栈先存储链表的节点。然后两个栈每次出栈一个节点,如果是重合节点,那么这两个节点是相等的。所以最后一个相等的节点就是第一个公共节点。代码# -*- coding:utf-8 -*-原创 2017-08-18 19:29:35 · 1426 阅读 · 0 评论 -
[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 · 1174 阅读 · 0 评论 -
[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 · 428 阅读 · 0 评论 -
[剑指Offer] 表示数值的字符串(Python)
题目描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。思路递归实现。将左右子数连接起来,我们需要得到每棵子树的头节点和尾节点。头节点就是根节点。尾节点依次可能是右子树的尾结点(若右子树不空),左子树...原创 2018-06-05 22:27:34 · 969 阅读 · 0 评论 -
[剑指Offer] 二叉树的下一个结点(Python)
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路分情况依次判断。 1. 若给定结点为空节点,则返回空 2. 若给定结点有右子树,则将结点指向右子树的根节点,然后找到其最左边的叶节点并返回 3. 若给定结点没有父节点,则返回空 4. 若给定结点有父节点,若给定结点是其父节点的...原创 2018-06-05 18:35:51 · 853 阅读 · 1 评论 -
[剑指Offer] 翻转单词顺序序列(Python)
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路思路...原创 2018-06-05 17:41:59 · 2000 阅读 · 0 评论 -
[剑指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 · 1884 阅读 · 0 评论 -
[剑指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 · 3007 阅读 · 0 评论 -
[剑指Offer] 把数组排成最小的数(Python)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路先将整数数组转为字符串数组,然后用比较器实现字符串比较大小。如果有字符串A和B, A + B < B + A,则A在前;反之B在前。最后将字符串数组连接去除返回值左侧的0。代码#...原创 2018-06-04 16:22:20 · 2534 阅读 · 0 评论 -
[排序] 快速排序(Python)
思想快速排序(快排)是非常常用的排序方法,在技术面试中出现频率也特别高。它主要采用交换和分治的策略进行排序。是不稳定排序。 步骤: 1、在序列中选一个元素作为划分的基准元素(pivot) 2、将所有不大于pivot的数字放在pivot的前面,大于pivot的数字放在pivot的后面 3、以pivot为界,对前后两个子序列分别递归重复前两步,直至区间内只有一个元素示例对序列 [2, 4, 7,原创 2017-08-11 15:09:03 · 972 阅读 · 0 评论 -
[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 · 378 阅读 · 0 评论 -
[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 · 462 阅读 · 0 评论 -
[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 · 401 阅读 · 0 评论 -
[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 · 678 阅读 · 0 评论 -
[排序] 简单选择排序(Python)
思想每一轮循环中,找到待排序列中的最小值,将其和待排序列头元素交换,最终达到有序示例对序列 [2, 4, 1, 3, 6, 5] 按升序排列 [2, 4, 1, 3, 6, 5] -> [1, 4, 2, 3, 6, 5] -> [1, 2, 4, 3, 6, 5] -> [1, 2, 3, 4, 6, 5] -> [1, 2, 3, 4, 6, 5] -> [1, 2, 3, 4, 5, 6]原创 2017-08-09 17:51:56 · 310 阅读 · 0 评论 -
[排序] 直接插入排序(Python)
思想遍历待排序列的每一个元素(从第二个元素开始),把当前元素插入到前面的有序序列中。是稳定的排序方法。示例对序列 [2, 4, 1, 3, 6, 5] 按升序排列 下标 排序过程 i = 1 [2, 4, 1, 3, 6, 5] i = 2 [2, 4, 1, 3, 6, 5] -> [2, 1, 4, 3, 6, 5] -> [1, 2, 4, 3, 6, 5] i =原创 2017-08-10 10:46:26 · 286 阅读 · 0 评论 -
[排序] 希尔排序(Python)
思想希尔排序(Shell)是直接插入排序的优化版本,实现了时间复杂度突破O(n2)O(n^2),策略在于不断分组并在组内进行直接插入排序。那么如何分组呢?这里提出一个概念——增量序列,希尔增量{n/2,n/4,...,1}(n为序列长度)\{n/2,n/4,...,1\}(n 为序列长度)就是一种增量序列,增量序列里的元素称为gap。我们依次把序列分为n/2n/2组,n/4n/4组,…,1组,即不断原创 2017-08-21 00:04:29 · 388 阅读 · 0 评论 -
[LintCode 384] 最长无重复字符的子串(Python)
题目描述给定一个字符串,请找出其中无重复字符的最长子字符串。样例 例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。 对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。思路遍历字符串中的每一个元素。借助一个辅助键值对来存储某个元素最后一次出现的下标。用一个整形变量存储当前无重复字符的子串开始的下标。代码class Solution:原创 2017-09-04 17:02:41 · 10233 阅读 · 1 评论 -
[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 · 2939 阅读 · 1 评论 -
[LintCode 389] 判断数独是否合法(Python)
题目描述 请判定一个数独是否有效。 该数独可能只填充了部分数字,其中缺少的数字用 . 表示。 样例 思路按每行,每列,每块判断。没有过多的技巧,逻辑题。可以借助set结构判断是否有重复元素。代码class Solution: """ @param: board: the board @return: whether the Sudoku is va原创 2017-08-22 17:30:19 · 1681 阅读 · 0 评论 -
[LintCode 453] 将二叉树拆成链表(Python)
题目描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。思路递归实现。将左右子数连接起来,我们需要得到每棵子树的头节点和尾节点。头节点就是根节点。尾节点依次可能是右子树的尾结点(若右子树不空),左子树的尾结点(若左子树原创 2017-08-25 18:04:58 · 806 阅读 · 0 评论 -
[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 · 703 阅读 · 0 评论 -
[LintCode 96] 链表划分(Python)
题目描述给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 样例 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null思路新建两个链表,一个存储小于x的节点,一个存储大于等于x的节点。最后把两个链表连接起来。注意把最后一个节点的next置为N原创 2017-08-21 14:18:13 · 614 阅读 · 0 评论 -
[LeetCode 386] Lexicographical Numbers(Python)
题目描述 Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9]. Please optimize your algorithm to use less time and space. The in原创 2017-08-22 13:39:20 · 454 阅读 · 0 评论 -
[Lintcode 397] 最长上升连续子序列(Python)
题目描述给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)样例 给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4. 给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LICS)为 [1, 2, 3, 4原创 2017-08-11 18:05:51 · 1105 阅读 · 0 评论 -
[剑指Offer 47] 不用加减乘除做加法(Java)
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路不用运算符号的计算,我们可以使用位运算。我们使用两个变量,一个记录当前位的数字,一个记录进位的数字。当进位数字不为0的条件下,迭代计算,直至进位数字为0。原创 2017-08-17 16:17:30 · 223 阅读 · 0 评论 -
[LeetCode 318] Maximum Product of Word Lengths(Python)
题目描述 Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may assume that each word will contain only lower cas原创 2017-08-21 10:59:59 · 463 阅读 · 0 评论 -
[LintCode 488] 快乐数 (Python)
题目描述:写一个算法来判断一个数是不是”快乐数”。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。思路:根据题干对快乐数的定义,我们很容易想到用循环结构来判断是否为快乐数。但是如果给定非快乐数,循环终止的条件在哪里呢?这样就需要我们了解快乐数的循环结构。原创 2017-08-07 15:41:47 · 1678 阅读 · 0 评论