
算法
hsc_1
这个作者很懒,什么都没留下…
展开
-
318. 最大单词长度乘积
class Solution: def maxProduct(self, words): """ :type words: List[str] :rtype: int """ mark = {word: (self.tool(word), len(word)) for word in words} ...原创 2019-01-04 08:09:16 · 232 阅读 · 0 评论 -
leetcode 子集2
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []] 我的愚笨的解答class Solution: def subsetsWithDup(self, nums): ...原创 2018-10-06 21:30:06 · 346 阅读 · 0 评论 -
通过双指针解决加油站问题
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明: 如果题目有解,该答案即为唯一答案。 输入数组均为非空数组,且长度相同。 输入数组...原创 2018-09-28 08:08:47 · 155 阅读 · 0 评论 -
分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5 def partition(self, h...原创 2018-09-28 07:47:02 · 138 阅读 · 0 评论 -
leetcode组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],] 其实中间的,for i in range(cur, n-k+2) 把中间的n-k+2换成n+1也可以accept的,但是呢,这样是不是可以减少...原创 2018-10-06 10:05:10 · 191 阅读 · 0 评论 -
leetcode二进制求和
"""给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101""""class Solution:原创 2018-10-05 22:01:36 · 169 阅读 · 0 评论 -
有序链表转换二叉搜索树 leetcode
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 ...原创 2018-10-11 21:21:27 · 470 阅读 · 0 评论 -
扔鸡蛋
###Google面试题:扔鸡蛋问题####原题描述 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋通过最少的次数确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋####方法分析 看到这个题目,最保险的方法就是一层一层试验,但这样只需要一个鸡蛋就可以了。我们现在有两个鸡蛋,完全可以用有更快的方法。进一步呢...转载 2018-10-11 19:45:15 · 170 阅读 · 0 评论 -
最接近的三数之和 leetcode
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). class Solution:...原创 2018-10-11 19:25:53 · 117 阅读 · 0 评论 -
kmp算法
def kmp(s, t): mark = func(t) print('mark is \n{}'.format(mark)) i, j = 0, 0 while j < len(s): print('i is {}, j is {}'.format(i, j)) if s[i: j + 1] == t[: j - i...原创 2018-10-03 12:06:32 · 133 阅读 · 0 评论 -
算法中二进制运算的应用
def subSet(nums): """ 通过二进制数的特性,求给定集合的子集 :param nums: :return: """ n = len(nums) res = [] for i in range(2 ** n): cur = [] for j in range(n): ...原创 2018-10-03 09:55:22 · 1045 阅读 · 0 评论 -
合并区间
给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。...原创 2018-10-02 23:45:49 · 566 阅读 · 0 评论 -
正则表达式匹配
给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符。'*' 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa"p...原创 2018-10-02 11:07:29 · 258 阅读 · 0 评论 -
leetcode 全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [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): """ :type nums:...原创 2018-10-06 21:45:12 · 307 阅读 · 0 评论 -
leetcode 全排列2
给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]class Solution: def permuteUnique(self, nums): """ :type nums: List[int] :rtype: L...原创 2018-10-06 22:27:21 · 432 阅读 · 0 评论 -
环形链表
142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题?设环的长度为z,n表示在快的跑到了(x + y)之后在环形上跑的圈数,head到入口的长度为x, 环的入口到第一次相遇的位置的长度为y。第一次相遇快的跑了(x + y + n * z), 慢的跑...原创 2018-10-17 16:13:29 · 149 阅读 · 0 评论 -
leetcode 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 这个超...原创 2018-10-17 15:25:06 · 250 阅读 · 0 评论 -
23. 合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6 # Definition for singly-linked list.# class List...原创 2018-10-19 15:51:10 · 196 阅读 · 0 评论 -
leetcode 第k个排列
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:"123" "132" "213" "231" "312" "321"给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。 给定 k 的范围是[1, n!]。示例 1:输入: n = 3原创 2018-10-09 21:50:20 · 154 阅读 · 0 评论 -
迅雷18年笔试中的一题
给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120 输入描述:整数n和m输出描述:求和等于m的所有组合的个数。输入例子1:6 8输出例子1:4没在牛客网上答过题目,第一次在牛客网上答题是头条的笔试。很是崩...原创 2018-09-30 12:28:42 · 293 阅读 · 0 评论 -
128. 最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为4class Solution(object): def longestConsecutive(self, nums): """ ...原创 2018-10-18 20:14:25 · 297 阅读 · 0 评论 -
第一个缺失的正整数 leetcode
为什么不能nums这样赋值呢?nums[nums[i]] = nums[i]呢例如 如果数组中存在3 那么我们可不可以nums[3] = 3呢?这样最后的结果会不会和 [0, 1, 2, 3, 4, 5]吗?然后对这个数组从1开始遍历不就好了吗这样做事不行的,因为[1,2,3,0]这样最后的结果就是[1, 1, 0, 3]。因为值1 会对数组中索引为1的值进行修改,然后数组中索...原创 2018-10-15 16:54:19 · 776 阅读 · 0 评论 -
最大矩形
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1",&qu原创 2018-09-30 07:49:42 · 138 阅读 · 0 评论 -
leetcode 下一个全排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1 class Solution: """ ...原创 2018-10-08 21:10:33 · 479 阅读 · 0 评论 -
只出现一次的数字 II leetcode
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99 class Solution(object): def sing...原创 2018-10-18 12:57:31 · 142 阅读 · 0 评论 -
第一个缺失的正整数 超级容易理解的方法 leetcode
之前看了这题,完全没有思路。看了答案,也是可以懂得原理。但是,依然还是看无数次,忘记无数次,不晓得再看多少次才能熟记。看了bitmap算法之后,对这个题产生了思路。首先,找到传入数组的最大值,这个的时间复杂度是O(n)。然后创建一个长度为n+1,全为'0'的字符串。为什么要取n+1,我只是为了后面取值的时候容易计算。也可以按照长度为n来做。然后遍历数组nums,例如遇见...原创 2018-10-13 14:03:19 · 386 阅读 · 0 评论 -
Python: 实现bitmap数据结构
这是根据网上看的一篇文章,对代码进行了修改。原网站的地址是:https://my.oschina.net/goal/blog/200347bitmap是很常用的数据结构,比如用于Bloom Filter中、用于无重复整数的排序等等。bitmap通常基于数组来实现,数组中每个元素可以看成是一系列二进制数,所有元素组成更大的二进制集合。对于Python来说,整数类型默认是有符号类型,所以一个整...原创 2018-10-13 13:31:24 · 436 阅读 · 0 评论 -
Manacher算法
网上找的算法解释都是分为三种情况的,但是呢,代码里面看着似乎没有对三种情况做区分。我自己按照三种情况写的,但是呢,可以进化到似乎不做区分的情况。下面注释掉的就是三种情况if : if : else:else:class Solution: def longestPalindrome(self, s): # new_nums = '!#'...原创 2018-09-15 10:56:50 · 128 阅读 · 0 评论 -
利用python对csv文件进行分割
有个任务,就是将一个大的csv分割为几个小的csv,当然是的包含表头的。于是,我想到了类似于,用双指针来做。import csvimport ospath = '/Users/mac/Desktop/186_3.csv'with open(path, 'r', newline='') as file: csvreader = csv.reader(file) a...原创 2018-10-01 07:59:16 · 21521 阅读 · 3 评论 -
不同的子序列
https://leetcode.com/problems/distinct-subsequences/discuss/37327/Easy-to-understand-DP-in-JavaThe idea is the following: we will build an array mem where mem[i+1][j+1] means that S[0..j] contai...翻译 2018-09-16 20:22:53 · 269 阅读 · 0 评论 -
交换单链表相邻的两个节点
给定一个链表,对每两个相邻的结点作交换并返回头节点。例如:给定 1->2->3->4,你应该返回 2->1->4->3。你的算法应该只使用额外的常数空间。不要修改列表中的值,只有节点本身可以更改。# Definition for singly-linked list.class ListNode: def __init__(self, x): ...原创 2018-04-06 11:44:03 · 4820 阅读 · 0 评论 -
关于全排列
全排列,我看了好多网上的教程,都看的有点懵逼。大部分都用了这个图(我上往截图截得)这是个什么鬼?要和后面的元素交换是对的,但是这样搞的结果,在我看来是有问题的。为什么呢?含有n个元素的全排列,结果是n的阶乘。而按照图来说,这样第一个位置的元素的可能性是有(n-1)个的。这样的话,总的结果就是(n-1)的阶乘了。(当然也可能是我的理解有错误,可能少数人,或者就我一个人这样理解了)直到我看了代码(这个...原创 2018-04-04 19:15:33 · 392 阅读 · 0 评论 -
下一个全排列
leetcode中的原题是:实现获取下一个排列函数,这个算法需要将数字重新排列成字典序中数字更大的排列。如果不存在更大的排列,则重新将数字排列成最小的排列(即升序排列)。修改必须是原地的,不开辟额外的内存空间。这是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1这个问题其实解释的很清楚了,但是不知道当时怎么了,我以为非常...原创 2018-04-10 14:17:03 · 1017 阅读 · 0 评论 -
深度优先搜索
给一组候选数字(C)(没有重复)并给一个目标数字(T),找出 C 中所有唯一的组合使得它们的和为 T。可以从 C 无限次数中选择相同的数字。说明:所有数字(包括目标)都是正整数。解集合中没有相同组合。 例如,给一个候选集合 [2, 3, 6, 7] 并且目标为 7,一个解的集合为:[ [7], [2, 2, 3]]class Solution: def combinationS...原创 2018-04-10 09:53:46 · 126 阅读 · 0 评论 -
再谈全排列
def permute(nums): perms=[[]] for ele in nums: new_perms=[] for perm in perms: for i in range(len(perm)+1): new_perms.append(perm[:i]+[ele]+perm[i:]...原创 2018-04-09 19:40:58 · 115 阅读 · 0 评论 -
堆排序
import java.util.*;public class HeapSorting{ public static void adajustHeap(int[] l,int i,int length){ for(int k=2*i+1;k<length;k++){ if(k+1<length && l[k]<l[k+1]) k++; ...原创 2018-03-12 12:18:15 · 120 阅读 · 0 评论 -
冒泡排序
def sort(arr): for i in range(len(arr)-1):#这个i+1表示的是后面i个数完成好了排序 for j in range(len(arr)-i-1): if arr[j]>arr[j+1]: temp=arr[j] arr[j]=arr[j+1]...原创 2018-03-12 12:15:43 · 129 阅读 · 0 评论 -
二分搜索
def bSearch(arr,x): left,right=0,len(arr)-1 while left<=right: middle=(left+right)//2 if arr[middle]==x: return middle elif x<arr[middle]: ...原创 2018-03-12 10:09:54 · 100 阅读 · 0 评论 -
快速排序
快速排序是基于分治策略的一种排序算法,其基本思想是,对输入的子数组a[p:r],按照以下三个步骤进行排序。1. 分解:以a[p]为基准元素,将a[p:r]分成三段,a[p:q-1],a[q],a[q+1:r],使得a[p:q-1]中的所有元素都小于a[q],a[q+1:r]中的所有元素都大于a[q]2. 递归求解:通过递归调用快速排序算法分别对a[p:q-1]和a[q+1:r]进行...原创 2018-03-12 09:54:19 · 158 阅读 · 0 评论 -
归并排序
归并的意思是将两个或两个以上的有序表组合成一个新的有序表。而归并排序是在归并操作上的一种有效的排序算法,该算法是采用分治法的一个有效应用。先使得序列有序,然后对有序序列进行合并。def merge(left,right): l,r=0,0 result=[] while l<len(left) and r<len(right)://当一个数组中全部...原创 2018-03-02 20:29:28 · 251 阅读 · 0 评论