算法练习
zhenghaitian
这个作者很懒,什么都没留下…
展开
-
[leetcode]python3 算法攻略-二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。方案一:中序排序后,返回第K-1个值class Solution(object): def kthSmallest(self, root, k): """ :type root: Tr...原创 2018-08-03 10:31:33 · 950 阅读 · 0 评论 -
[leetcode]python3 算法攻略-计数质数
统计所有小于非负整数 n 的质数的数量。方案一:厄拉多塞筛法 参考:https://blog.csdn.net/github_39261590/article/details/73864039class Solution(object): def countPrimes(self, n): """ :type n: int :r...原创 2018-07-21 09:04:33 · 1017 阅读 · 0 评论 -
[leetcode]python3 算法攻略-递增的三元子序列
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。方案一:res[0]存储递增序列的最小起点,res[1]存储递增序列第二位的最小值class Solution(object): def increasingTriplet(self, nums): """ :type nums: List[int] :rtype...原创 2018-07-29 09:34:06 · 1506 阅读 · 2 评论 -
[leetcode]python3 算法攻略-最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。方案一:class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ n = len(s) ...原创 2018-07-29 08:48:08 · 715 阅读 · 1 评论 -
[leetcode]python3 算法攻略-缺失数字
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。方案一:利用总和求解class Solution(object): def missingNumber(self, nums): """ :type nums: List[int] :rtype: int ...原创 2018-07-26 08:21:07 · 286 阅读 · 0 评论 -
[leetcode]python3 算法攻略-二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。方案一:先进先出class Solution(object): def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ if ...原创 2018-07-15 08:15:40 · 366 阅读 · 0 评论 -
[leetcode]python3 算法攻略-对称二叉树
给定一个二叉树,检查它是否是镜像对称的。方案一:class Solution(object): def isSymmetric(self, root): """ :type root: TreeNode :rtype: bool """ def issametree(l, r): if ...原创 2018-07-15 07:50:50 · 382 阅读 · 0 评论 -
[leetcode]python3 算法攻略-验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。方案一:构建一个辅助函数,把当前节点的值,传递给子节点,在子节点中进行比较class Solution(object): def validBST(self,root,small,la...原创 2018-07-14 08:49:20 · 1096 阅读 · 0 评论 -
[leetcode]python3 算法攻略-二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。方案一:递归思想# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# ...原创 2018-07-14 08:07:38 · 431 阅读 · 0 评论 -
[leetcode]python3 算法攻略-Fizz Buzz
写一个程序,输出从 1 到 n 数字的字符串表示。1. 如果 n 是3的倍数,输出“Fizz”;2. 如果 n 是5的倍数,输出“Buzz”;3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。方案一:class Solution(object): def fizzBuzz(self, n): """ :type n: int...原创 2018-07-20 08:49:00 · 366 阅读 · 0 评论 -
[leetcode]python3 算法攻略-最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。方案一:时间复杂度O(n)class MinStack(object): def __init__(self): ...原创 2018-07-20 08:35:26 · 789 阅读 · 0 评论 -
[leetcode]python3 算法攻略-有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。方案一:如栈出栈的思路,没有想到```https://www.cnblogs.com/bozhou/p/6958405.htmlclass Solution(objec...原创 2018-07-25 10:04:01 · 777 阅读 · 1 评论 -
[leetcode]python3 算法攻略-杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。方案一:给通过给i-1行左右补组0,然后列表解析的方式一步到位得到第i行class Solution(object): def generate(self, numRows): """ :type numRows: int :rtype: List[List[i...原创 2018-07-25 09:23:35 · 469 阅读 · 0 评论 -
[leetcode]python3 算法攻略-字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。方案一:假定只包含小写字母。class Solution: def firstUniqChar(self, s): """ :type s: str :rtype: int """ lowercase = 'abcdefghi...原创 2018-07-07 10:32:24 · 1334 阅读 · 0 评论 -
[leetcode]python3 算法攻略-3的幂
给定一个整数,写一个函数来判断它是否是 3 的幂次方。你能不使用循环或者递归来完成本题吗?方案一:对n取以3为底的对数k, 若3**k == n, 则该数为3的幂次方class Solution(object): def isPowerOfThree(self, n): """ :type n: int :rtype: bool...原创 2018-07-21 09:36:22 · 953 阅读 · 0 评论 -
[leetcode]python3 算法攻略-将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。方案一:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# ...原创 2018-07-16 08:07:15 · 223 阅读 · 0 评论 -
[leetcode]python3 算法攻略-合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。方案一:从最后一个元素开始做起class Solution(object): def merge...原创 2018-07-16 08:43:20 · 919 阅读 · 0 评论 -
[leetcode]python3 算法攻略-填充同一层的兄弟节点
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。说明:你只能使用额外常数空间。 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。 你可以假设它是一个完美二叉树(即所有叶子节点都在同一层,每个父节点都有两个子节点)。方案一:利...原创 2018-08-03 10:19:35 · 314 阅读 · 0 评论 -
[leetcode]python3 算法攻略-从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。方案一:参考了别人的,感觉有点问题[3, 9, 20, 15, 7], [9, 15, 3, 20, 7]class Solution(object): def buildTree(self, preorder, inorder): if inorder == []: return None...原创 2018-08-01 10:36:44 · 306 阅读 · 0 评论 -
[leetcode]python3 算法攻略-二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。方案一:在层次遍历的基础上,添加一个变量用于判断当前层是奇数层还是偶数层class Solution(object): def zigzagLevelOrder(self, root): """ :type root: TreeN...原创 2018-08-01 09:37:06 · 449 阅读 · 0 评论 -
[leetcode]python3 算法攻略-无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。方案一:找到规律即可。class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ res = '' m...原创 2018-07-28 09:13:51 · 775 阅读 · 0 评论 -
[leetcode]python3 算法攻略-字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。方案一:对字符串排序class Solution(object): def groupAnagrams(self, strs): """ :type strs: List[str] :rtype: List[List[str]] "...原创 2018-07-28 09:12:09 · 213 阅读 · 0 评论 -
[leetcode]python3 算法攻略-中序遍历二叉树
给定一个二叉树,返回它的中序 遍历。方案一:递归算法class Solution(object): def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: ...原创 2018-07-31 09:38:36 · 490 阅读 · 0 评论 -
[leetcode]python3 算法攻略-相交链表
编写一个程序,找到两个单链表相交的起始节点。方案一:class Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ if...原创 2018-07-31 09:12:14 · 362 阅读 · 1 评论 -
[leetcode]python3 算法攻略-矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。方案一:先找到 元素0的索引,再置零class Solution(object): def setZeroes(self, matrix): """ :type matrix: List[List[int]] :rtype: vo...原创 2018-07-27 08:48:11 · 1227 阅读 · 0 评论 -
[leetcode]python3 算法攻略-三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。方案一:class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtype...原创 2018-07-27 08:29:13 · 1174 阅读 · 0 评论 -
[leetcode]python3 算法攻略-位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。方案一:使用位运算符>>class Solution(object): def hammingWeight(self, n): """ :type n: int :rtype: int """ ...原创 2018-07-22 08:50:21 · 241 阅读 · 0 评论 -
[leetcode]python3 算法攻略-罗马数字转整数
罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。...原创 2018-07-22 08:26:24 · 374 阅读 · 0 评论 -
[leetcode]python3 算法攻略-奇偶链表
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。方案一:class Solution(object): def oddEvenList(self, head): ...原创 2018-07-30 09:44:13 · 853 阅读 · 0 评论 -
[leetcode]python3 算法攻略-两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。方案一:class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode ...原创 2018-07-30 08:33:51 · 513 阅读 · 0 评论 -
[leetcode]python3 算法攻略-反转整数
给定一个 32 位有符号整数,将整数中的数字进行反转。方案一:匿名函数s用于确定x的正负性。class Solution: def reverse(self, x): """ :type x: int :rtype: int """ s = lambda x: x and [1, -1][x < 0] ...原创 2018-07-07 09:14:36 · 470 阅读 · 0 评论 -
[leetcode]python3 算法攻略-打乱数组
打乱一个没有重复元素的数组。方案一:创建一个新列表记录原始列表import randomclass Solution(object): def __init__(self, nums): """ :type nums: List[int] """ self.origin = nums[:] sel...原创 2018-07-19 08:27:18 · 754 阅读 · 0 评论 -
[leetcode]python3 算法攻略-打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。方案一:pre 始终记录上一个最大值。class Solution(object): def r...原创 2018-07-19 08:02:35 · 539 阅读 · 0 评论 -
[leetcode]python3 算法攻略-移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。方案一:减一个0,加一个0def moveZeroes(nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ c...原创 2018-07-04 09:07:00 · 393 阅读 · 0 评论 -
[leetcode]python3 算法攻略-加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。方案一:利用数学公式求原数组的int形式def plusOne(digits): """ :type digits: List[int] :rtype: List[int] """ ...原创 2018-07-04 08:06:22 · 503 阅读 · 0 评论 -
[leetcode]python3 算法攻略-最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。方案一:找出最短字符串, 依次验证最短字符串的前n位字符def longestCommonPrefix(strs): """ :type strs: List[str] :rtype: str """ if not strs: return '' s...原创 2018-07-10 10:41:33 · 413 阅读 · 0 评论 -
[leetcode]python3 算法攻略-报数
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个二&quo原创 2018-07-10 09:46:05 · 493 阅读 · 0 评论 -
[leetcode]python3 算法攻略-两个数组的交集 II
给定两个数组,写一个方法来计算它们的交集。方案一:利用collections.Counter的&运算,一步到位,找到 最小次数 的相同元素。def intersect(nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: List[int] """ i...原创 2018-07-03 11:57:57 · 1604 阅读 · 0 评论 -
[leetcode]python3 算法攻略-只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。方案一:去重求和,乘2减原def singleNumber(nums): """ :type nums: List[int] :rtype: int """ return sum(set(nums)) * 2 - sum(nums)方案二:根据 异或运算法则...原创 2018-07-03 11:06:28 · 312 阅读 · 0 评论 -
[leetcode]python3 算法攻略-实现strStr()
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。方案一:在Python中是find函数class Solution: def strStr(self, haystack, needle): """ :type haystack:...原创 2018-07-09 10:04:46 · 185 阅读 · 0 评论