04 2020 档案
Leetcode练习(Python):链表类:第21题:合并两个有序链表:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
摘要:题目: 合并两个有序链表:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路: 本题思路较简单。 程序: # Definition for singly-linked list. # class ListNode: # def __init__(sel 阅读全文
posted @ 2020-04-30 23:28 桌子哥 阅读(1608) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):链表类:第19题:删除链表的倒数第N个节点:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。说明: 给定的 n 保证是有效的。
摘要:题目: 删除链表的倒数第N个节点:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。说明: 给定的 n 保证是有效的。 思路: 这道题以前见过,好像是一个叫睿企还是睿智的科技公司的笔试题。使用两个指针,这两个指针的间隔是n。 程序: # Definition for singly-l 阅读全文
posted @ 2020-04-30 23:14 桌子哥 阅读(228) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第149题:直线上最多的点数:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
摘要:题目: 直线上最多的点数:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。 思路: 使用斜率来判断,但是在计算斜率时要使用精确计算。 需要考虑不存在斜率,存在斜率和重复点的情况,思路较简单。 这道题在工商银行FinTech笔试题里做过。 程序: from decimal imp 阅读全文
posted @ 2020-04-30 16:01 桌子哥 阅读(913) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第76题:最小覆盖子串:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。
摘要:题目: 最小覆盖子串:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。 说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。 思路: 使用滑动窗口法。 程序: from collections i 阅读全文
posted @ 2020-04-30 14:00 桌子哥 阅读(1056) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第37题:解数独:编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
摘要:题目: 解数独:编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 '.' 表示。 思路: 这道题太难了,按照自己的思路 阅读全文
posted @ 2020-04-30 10:54 桌子哥 阅读(445) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第30题:串联所有单词的子串:给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。
摘要:题目: 串联所有单词的子串:给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。 思路: 暴力解法,使用了滑动窗口的 阅读全文
posted @ 2020-04-29 21:50 桌子哥 阅读(497) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第187题:重复的DNA序列:所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超过一次的 10 个字母长的序列(子串)。
摘要:题目: 重复的DNA序列:所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超过一次的 10 个字母长的序列(子串)。 思路: 滑动窗口法 阅读全文
posted @ 2020-04-29 18:04 桌子哥 阅读(589) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第166题:分数到小数:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。 如果小数部分为循环小数,则将循环的部分括在括号内。
摘要:题目: 分数到小数:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。 如果小数部分为循环小数,则将循环的部分括在括号内。 思路: 一开始想到用哈希表来存储小数点后的部分,就是没有想出一个很好的表达,一直也不对,看来一个大神的解答,写的很好啊 阅读全文
posted @ 2020-04-28 16:41 桌子哥 阅读(742) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第138题: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。
摘要:题目: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示: val:一个表示 Node.val 的整数。 阅读全文
posted @ 2020-04-28 14:15 桌子哥 阅读(195) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第94题:给定一个二叉树,返回它的中序 遍历。
摘要:题目: 给定一个二叉树,返回它的中序 遍历。 思路: 练习过很多次了,都记住了,但是没有找到用哈希表的点。使用递归来实现很方便,掌握中序遍历的原理就好。 程序: # Definition for a binary tree node. # class TreeNode: # def __init__ 阅读全文
posted @ 2020-04-28 13:48 桌子哥 阅读(242) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第49题:字母异位词分组:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
摘要:题目: 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 说明: 所有输入均为小写字母。 不考虑答案输出的顺序。 思路: 使用sort()将单词排序。 程序: class Solution: def groupAnagrams(self, strs: List[ 阅读全文
posted @ 2020-04-28 10:54 桌子哥 阅读(761) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第36题:有效的数独:判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
摘要:题目: 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 上图是一个部分填充的有效的数独。 数独部分空格内已填入了数字,空白 阅读全文
posted @ 2020-04-28 10:36 桌子哥 阅读(469) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第242题:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
摘要:题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 思路: 使用两个哈希表,最后判断这两个哈希表是否相等,思路较简单。 程序: class Solution: def isAnagram(self, s: str, t: str) -> bool: length 阅读全文
posted @ 2020-04-27 16:33 桌子哥 阅读(663) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第205题:给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
摘要:题目: 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。 思路: 使用两个哈希表来实现,思路较简单。 程序: cl 阅读全文
posted @ 2020-04-27 16:21 桌子哥 阅读(432) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第204题:统计所有小于非负整数 n 的质数的数量。
摘要:题目: 统计所有小于非负整数 n 的质数的数量。 思路: 按照标签使用哈希表,借助判断质数的函数导致超时了,如程序1所示,测试可以通过。后来看使用一种很快的方法叫厄拉多塞筛法,如程序2所示。 程序1: class Solution: def countPrimes(self, n: int) ->  阅读全文
posted @ 2020-04-27 16:03 桌子哥 阅读(402) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第202题:编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。 如果 n 是快乐数就返回 True ;不是,则返回 False 。
摘要:题目: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。 如果 n 是快乐数就返回 True ;不是,则返 阅读全文
posted @ 2020-04-27 15:08 桌子哥 阅读(802) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第136题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
摘要:题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 思路: 使用哈希表,第一次遍历记录元素出现的次数,第二次遍历查询只出现一次的元素。 程序: class Solution: def singleNumber(self, nums: Lis 阅读全文
posted @ 2020-04-27 14:58 桌子哥 阅读(1252) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):哈希表类:第3题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
摘要:题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 思路: 使用哈希表变得简单了很多,使用暴力法很容易超时。 程序: class Solution: def lengthOfLongestSubstring(self, s: str) -> int: length = len( 阅读全文
posted @ 2020-04-27 14:41 桌子哥 阅读(1027) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题16. 数值的整数次方:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
摘要:题目: 数值的整数次方:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 思路: 递归,二分法 程序: class Solution: def myPow(self, x: float, 阅读全文
posted @ 2020-04-27 14:23 桌子哥 阅读(388) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题10- II. 青蛙跳台阶问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
摘要:题目: 青蛙跳台阶问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 思路: 和斐波那契数列思路类似。 程序: import functool 阅读全文
posted @ 2020-04-27 10:24 桌子哥 阅读(1592) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题10- I. 斐波那契数列:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0,   F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
摘要:题目: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 思路: 递归,别忘了取模啊。 程序: import functools cla 阅读全文
posted @ 2020-04-27 10:09 桌子哥 阅读(3072) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题07. 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
摘要:题目: 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 思路: 简单 程序: # Definition for a binary tree node.# class TreeNode:# def __init__(self, 阅读全文
posted @ 2020-04-27 09:57 桌子哥 阅读(282) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题 16.11. 跳水板:你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。
摘要:题目: 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 提示: 0 < shorter <= longer 0 <= k <= 1 阅读全文
posted @ 2020-04-26 20:31 桌子哥 阅读(566) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题 08.06. 汉诺塔问题:在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。
摘要:题目: 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子 阅读全文
posted @ 2020-04-26 10:16 桌子哥 阅读(870) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):递归类:面试题 08.05. 递归乘法:递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
摘要:题目: 递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。 思路: 递归,思路简单。 程序: class Solution: def multiply(self, A: int, B: int) -> int: A, B = max(A, 阅读全文
posted @ 2020-04-26 09:51 桌子哥 阅读(828) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第238题:给你一个长度为&#160;n&#160;的整数数组&#160;nums,其中&#160;n > 1,返回输出数组&#160;output&#160;,其中 output[i]&#160;等于&#160;nums&#160;中除&#160;nums[i]&#160;之外其余各元素的乘积。
摘要:题目: 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。 说明: 阅读全文
posted @ 2020-04-25 21:44 桌子哥 阅读(348) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第229题:给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
摘要:题目: 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。 思路: 思路1:使用函数;思路2:使用投票法 程序1:使用函数 class Solution: def majorityElement(self, 阅读全文
posted @ 2020-04-25 20:26 桌子哥 阅读(780) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第228题:给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
摘要:题目: 给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。 思路: 本题思路简单。 程序: class Solution: def summaryRanges(self, nums: List[int]) -> List[str]: length = len(nums) if length  阅读全文
posted @ 2020-04-25 19:49 桌子哥 阅读(635) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第216题:找出所有相加之和为&#160;n 的&#160;k&#160;个数的组合。组合中只允许含有 1 -&#160;9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。
摘要:题目: 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 思路: 这种情况下使用递归 程序: class Solution: def combinationSum3(self, 阅读全文
posted @ 2020-04-25 19:34 桌子哥 阅读(514) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第209题:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
摘要:题目: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。 进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法 思路: 双指针+滑动窗口 在一个小科技公 阅读全文
posted @ 2020-04-25 19:07 桌子哥 阅读(3159) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第162题:峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。
摘要:题目: 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 说明: 你的解法应该 阅读全文
posted @ 2020-04-25 17:40 桌子哥 阅读(827) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第154题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组&#160;[0,1,2,4,5,6,7] 可能变为&#160;[4,5,6,7,0,1,2]&#160;)。 请找出其中最小的元素。 注意数组中可能存在重复的元素。
摘要:题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。 说明: 这道题是 寻找旋转排序数组中的最小值 的延伸题目。 允许重复会影响算法的时间 阅读全文
posted @ 2020-04-25 17:20 桌子哥 阅读(429) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第153题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组&#160;[0,1,2,4,5,6,7] 可能变为&#160;[4,5,6,7,0,1,2]&#160;)。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。
摘要:题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。 思路: 思路1,用函数,这样感觉有点不厚道;思路2,用二分法 程序1: class 阅读全文
posted @ 2020-04-25 17:06 桌子哥 阅读(486) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第152题:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。
摘要:题目: 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。 思路: 考虑数组中为负数的情况。 程序: class Solution: def maxProduct(self, nums: List[int]) -> int: length = len(n 阅读全文
posted @ 2020-04-25 16:18 桌子哥 阅读(1131) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第219题:给定一个整数数组和一个整数&#160;k,判断数组中是否存在两个不同的索引&#160;i&#160;和&#160;j,使得&#160;nums [i] = nums [j],并且 i 和 j&#160;的差的 绝对值 至多为 k。
摘要:题目: 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。 思路: 使用哈希就很简单了。 程序: class Solution: def containsNearbyDuplica 阅读全文
posted @ 2020-04-24 16:41 桌子哥 阅读(576) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第217题:给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
摘要:题目: 给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 思路: 题目思路简单。 程序: class Solution: def containsDuplicate(self, nums: List[ 阅读全文
posted @ 2020-04-24 16:01 桌子哥 阅读(2239) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第167题:给定一个已按照升序排列&#160;的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1&#160;必须小于&#160;index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。
摘要:题目: 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且 阅读全文
posted @ 2020-04-24 15:55 桌子哥 阅读(678) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第189题:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
摘要:题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 说明: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 要求使用空间复杂度为 O(1) 的 原地 算法。 思路: 本题思路简单。 程序: class Solution: def rotate(self, 阅读全文
posted @ 2020-04-24 15:36 桌子哥 阅读(1121) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第169题:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于&#160;⌊ n/2 ⌋&#160;的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。
摘要:题目: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 思路: 使用哈希非常方便 程序: class Solution: def majorityElement(self, nums 阅读全文
posted @ 2020-04-24 15:20 桌子哥 阅读(1551) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第128题:给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。
摘要:题目: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 思路: 要求的时间复杂度为O(n),则只允许一次循环。 程序: class Solution: def longestConsecutive(self, nums: List[int]) -> int: 阅读全文
posted @ 2020-04-24 14:22 桌子哥 阅读(1262) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第106题:根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。
摘要:题目: 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 思路: 与第105题类似,区别是前序遍历一开始找的是左子树的结点,后续遍历一开始找的是右子树的结点,因为从后面开始找数字。 程序: # Definition for a binary tree node. # 阅读全文
posted @ 2020-04-24 13:45 桌子哥 阅读(238) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第105题:根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。
摘要:题目: 第105题:根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 思路: 使用递归,练习过很多次了 程序: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x 阅读全文
posted @ 2020-04-24 13:30 桌子哥 阅读(280) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。
摘要:题目: 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 思路: 与第78题思路一样,用迭代法,对重复的数据进行判断再进行操作就可以。 程序: class Solution: def subsetsWithDup(self, nums: 阅读全文
posted @ 2020-04-24 13:04 桌子哥 阅读(602) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第85题:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
摘要:题目: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 思路: 使用head和tail来构建以某点为基准的矩形的宽,使用height来定义以某点为基准的矩形的高。 程序: class Solution: def maximalRectangle(self,  阅读全文
posted @ 2020-04-24 10:36 桌子哥 阅读(3301) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第84题:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。
摘要:题目: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路: 自己想的方法类似于接雨水的问题,但是计算量在有的例子的时候太大,超时了,参考的别人的方法,就是使用栈和哨兵的思路,这个思路的程序设计的很巧妙。 程 阅读全文
posted @ 2020-04-23 18:55 桌子哥 阅读(946) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第88题:给你两个有序整数数组&#160;nums1 和 nums2,请你将 nums2 合并到&#160;nums1&#160;中,使 nums1 成为一个有序数组。 &#160; 说明: 初始化&#160;nums1 和 nums2 的元素数量分别为&#160;m 和 n 。
摘要:题目: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 num 阅读全文
posted @ 2020-04-23 16:38 桌子哥 阅读(577) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第81题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组&#160;[0,0,1,2,2,5,6]&#160;可能变为&#160;[2,5,6,0,0,1,2]&#160;)。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回&#160;true,否则返回&#160;false。
摘要:题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 进阶: 这是 搜索旋转排序数组 的延伸题目,本 阅读全文
posted @ 2020-04-23 16:16 桌子哥 阅读(345) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第80题:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
摘要:题目: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 思路: 思路较简单 程序: class Solution: def removeDuplicate 阅读全文
posted @ 2020-04-23 15:46 桌子哥 阅读(564) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第79题:给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
摘要:题目: 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 思路: 深度优先和回溯法结合 程序1: class Solution(object): d 阅读全文
posted @ 2020-04-23 15:03 桌子哥 阅读(1863) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第78题:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。
摘要:题目: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 思路: 思路较简单,迭代法。 程序: class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: l 阅读全文
posted @ 2020-04-23 12:33 桌子哥 阅读(958) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第75题:给定一个包含红色、白色和蓝色,一共&#160;n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、&#160;1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。
摘要:题目:第75题:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 思路: 思路较简单,提示了进阶思路 阅读全文
posted @ 2020-04-23 11:26 桌子哥 阅读(942) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第74题:编写一个高效的算法来判断&#160;m x n&#160;矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。
摘要:题目: 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 思路: 对行进行二分 程序: class Solution: def searchMatrix(self, matrix: L 阅读全文
posted @ 2020-04-22 16:24 桌子哥 阅读(659) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第73题:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
摘要:题目: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 思路: 进阶: 一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出 阅读全文
posted @ 2020-04-22 15:33 桌子哥 阅读(862) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第64题:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。
摘要:题目: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 思路: 本题较简单。 程序: class Solution: def minPathSum(self, grid: List[List[int]]) 阅读全文
posted @ 2020-04-22 14:22 桌子哥 阅读(1324) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第63题:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
摘要:题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 思路: 和没有障碍思路类似,将有 阅读全文
posted @ 2020-04-22 13:27 桌子哥 阅读(1550) 评论(0) 推荐(0) 编辑
Leetcode练习(Python) :数组类:第62题:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?
摘要:题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 思路: 找每个位置最多的可能的情况。 与华为面试第一轮的题目类似。 程序: 阅读全文
posted @ 2020-04-22 12:27 桌子哥 阅读(1894) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第120题:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。说明: 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
摘要:题目: 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。说明: 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。 思路: 要从下到上进行设计,从上到下进行设计会有错误。 程序: class Solution: def 阅读全文
posted @ 2020-04-22 11:59 桌子哥 阅读(580) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第119题:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
摘要:题目: 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。 思路: 思路简单,稍后看看题目的进阶做法,然后做相应的增加。 程序1:(空间复杂度为O(k^2)) class Solution: def getRow(self, rowIndex: int) -> List[int]: 阅读全文
posted @ 2020-04-21 18:20 桌子哥 阅读(528) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第118题:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
摘要:题目: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 思路:本题较简单 程序: class Solution: def generate(self, numRows: int) -> List[List[int]]: result = [] if numRows <= 0 阅读全文
posted @ 2020-04-21 18:12 桌子哥 阅读(670) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):第66题:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。
摘要:题目: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 思路:考虑进位的情况就可以了,较简单 程序: class Solution: def plusOne(sel 阅读全文
posted @ 2020-04-21 16:09 桌子哥 阅读(1880) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第123题:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成&#160;两笔&#160;交易。 注意:&#160;你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
摘要:题目:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 思路:自己的思路是每逢可以交易的条件就进行交易,没有考虑全局。结果一直不对,参考网 阅读全文
posted @ 2020-04-21 15:31 桌子哥 阅读(2096) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第122题:给定一个数组,它的第&#160;i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
摘要:题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 思路: 动态规划 在某教育科技公司面试时做过,笔试两轮结束后,问 阅读全文
posted @ 2020-04-21 12:48 桌子哥 阅读(1246) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第121题:给定一个数组,它的第&#160;i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。
摘要:题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 思路:动态规划(最佳),还可以用暴力 在某教育科技公司面试时遇到过。 程序1:动态规划 cl 阅读全文
posted @ 2020-04-21 11:04 桌子哥 阅读(1104) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第57题:给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
摘要:题目: 给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 思路:开始使用纯逻辑的思路,使用了大量的判断,如程序2所示,可以通过题目的两个例子,但是在自创例子时出现了超时的提示(要把复杂的问题简单化 阅读全文
posted @ 2020-04-20 20:47 桌子哥 阅读(492) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第59题:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
摘要:题目: 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 思路: 是第54题的逆向过程 程序: class Solution: def generateMatrix(self, n: int) -> List[List[int]]: if n <=  阅读全文
posted @ 2020-04-20 16:30 桌子哥 阅读(926) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第56题: 给出一个区间的集合,请合并所有重叠的区间。
摘要:题目:给出一个区间的集合,请合并所有重叠的区间。 思路:方案设计比较简单,之前可能是数组的排序用的方法有点复杂了,测试可以通过,提交的时候老是显示超时。 程序: class Solution: def merge(self, intervals: List[List[int]]) -> List[L 阅读全文
posted @ 2020-04-20 15:58 桌子哥 阅读(1252) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第55题:给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。
摘要:题目: 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 思路: 较简单,与第45题思路类似 程序: class Solution: def canJump(self, nums: List[int]) -> b 阅读全文
posted @ 2020-04-20 13:19 桌子哥 阅读(1109) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第54题:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
摘要:题目: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 思路: 使用两个指针,然后控制好边界就可以了。 程序: class Solution: def spiralOrder(self, matrix: List[List[int]]) -> 阅读全文
posted @ 2020-04-20 12:52 桌子哥 阅读(1737) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第53题:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
摘要:题目: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 思路:贪心法和分而治之 程序1:贪心发 class Solution: def maxSubArray(se 阅读全文
posted @ 2020-04-20 10:49 桌子哥 阅读(1923) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第48题:给定一个 n&#160;&#215;&#160;n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
摘要:题目: 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 思路: 矩阵的转置,两次转动法(做题时状态不好,做了很长时间) 程序: class Solution: def  阅读全文
posted @ 2020-04-19 23:11 桌子哥 阅读(473) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第45题:给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
摘要:题目:给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 思路:设定一个边界,看看哪种方式可以跳的方式最远。 程序: class Solution: def jump(self, nums: L 阅读全文
posted @ 2020-04-19 20:25 桌子哥 阅读(2351) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第42题:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
摘要:题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 思路:与第11题的思路很像 程序: class Solution: def trap(self, height: List[int]) -> int: result = 0 index_left 阅读全文
posted @ 2020-04-19 19:26 桌子哥 阅读(1705) 评论(3) 推荐(0) 编辑
Leetcode练习(Python):数组类:第41题:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。
摘要:题目:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。 思路:第一个思路是创建一个锚点,这个锚点表示第一个正整数的出现的位置,然后再分情况来判断,结果程序无法通过所有的测试用例,第一个思路方法以后再实现,后来使用Hash 阅读全文
posted @ 2020-04-19 17:04 桌子哥 阅读(1934) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第40题:给定一个数组&#160;candidates&#160;和一个目标数&#160;target&#160;,找出&#160;candidates&#160;中所有可以使数字和为&#160;target&#160;的组合。 candidates&#160;中的每个数字在每个组合中只能使用一次。
摘要:题目: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。解集不能包含重复的组合。 思路:总体思路和第39 阅读全文
posted @ 2020-04-19 13:53 桌子哥 阅读(533) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第39题:给定一个无重复元素的数组&#160;candidates&#160;和一个目标数&#160;target&#160;,找出&#160;candidates&#160;中所有可以使数字和为&#160;target&#160;的组合。 candidates&#160;中的数字可以无限制重复被选取。
摘要:题目: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。解集不能包含重复的组合。 思路:使用 阅读全文
posted @ 2020-04-19 11:47 桌子哥 阅读(764) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第35题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。
摘要:题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 思路:题目比较简单 程序: class Solution: def searchInsert(self, nums: List[int], t 阅读全文
posted @ 2020-04-18 15:41 桌子哥 阅读(1320) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第34题:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是&#160;O(log n) 级别。 如果数组中不存在目标值,返回&#160;[-1, -1]。
摘要:题目: 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 思路:二分法,使用一个指针来找到数字的开头和结尾位置 程序: class  阅读全文
posted @ 2020-04-18 15:01 桌子哥 阅读(2330) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第33题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组&#160;[0,1,2,4,5,6,7]&#160;可能变为&#160;[4,5,6,7,0,1,2]&#160;)。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回&#160;-1&#160;。 你可以假设数组中不存在重复的元素。 你
摘要:题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必 阅读全文
posted @ 2020-04-18 14:04 桌子哥 阅读(469) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第31题:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。
摘要:题目:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 思路:两个指针,一个向前,一个向后 程序: class Solution: def nextP 阅读全文
posted @ 2020-04-18 13:09 桌子哥 阅读(619) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第27题:给你一个数组 nums&#160;和一个值 val,你需要 原地 移除所有数值等于&#160;val&#160;的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
摘要:题目: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 思路:较简单 程序: clas 阅读全文
posted @ 2020-04-18 10:46 桌子哥 阅读(583) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第26题:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
摘要:题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路:原地删除,在原有数组上进行处理 程序: class Solution: def rem 阅读全文
posted @ 2020-04-18 10:37 桌子哥 阅读(604) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第18题:给定一个包含&#160;n 个整数的数组&#160;nums&#160;和一个目标值&#160;target,判断&#160;nums&#160;中是否存在四个元素 a,b,c&#160;和 d&#160;,
摘要:题目:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 思路:和三个数的情况类似,举 阅读全文
posted @ 2020-04-17 22:33 桌子哥 阅读(664) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第16题:给定一个包括&#160;n 个整数的数组&#160;nums&#160;和 一个目标值&#160;target。找出&#160;nums&#160;中的三个整数,使得它们的和与&#160;target&#160;最接近。返回这三个数的和。假定每组输入只存在唯一答案。
摘要:题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 思路:三指针法,和牛顿下降法的思路很类似,给定一个初始值,不断迭代找到符合要求的最优值 class Sol 阅读全文
posted @ 2020-04-17 19:02 桌子哥 阅读(491) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第15题:给你一个包含 n 个整数的数组&#160;nums,判断&#160;nums&#160;中是否存在三个元素 a,b,c ,使得&#160;a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。
摘要:题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 思路:可以参考两个数求和的思路,但是需要考虑结果重复的情况。 代码1:使用两个数求和思路 阅读全文
posted @ 2020-04-17 17:16 桌子哥 阅读(2148) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):数组类:第11题:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点&#160;(i,&#160;ai) 。在坐标内画 n 条垂直线,垂直线 i&#160;的两个端点分别为&#160;(i,&#160;ai) 和 (i, 0)。找出其中的两条线,使得它们与&#160;x&#160;轴共同构成的容器可以容纳最多的水。
摘要:题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且 n 的值至少为 阅读全文
posted @ 2020-04-17 14:38 桌子哥 阅读(1079) 评论(0) 推荐(0) 编辑
LeetCode练习(Python):数组类:第4题:给定两个大小为 m 和 n 的有序数组&#160;nums1 和&#160;nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为&#160;O(log(m + n))。 你可以假设&#160;nums1&#160;和&#160;nums2&#160;不会同时为空
摘要:题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空 思路:看到要求的时间复杂度为O(log(m + n)),想到了二分搜索,使用二分 阅读全文
posted @ 2020-04-17 13:36 桌子哥 阅读(382) 评论(0) 推荐(0) 编辑
LeetCode练习(Python):数组类:第1题:给定一个整数数组 nums&#160;和一个目标值 target,请你在该数组中找出和为目标值的那&#160;两个&#160;整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
摘要:题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 思路:本题较为简单,一个元素不能使用两遍,因此只能用一次循环,在一次循环里解决所有问题。 cl 阅读全文
posted @ 2020-04-17 10:25 桌子哥 阅读(751) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Spark ML Pipeline机器学习流程
摘要:情况一:二元分类 这部分使用的数据集是判断网页是暂时的还是长青的。因为涉及到了文本的信息,所以需要进行文本的数字化和向量化。 在这部分中,机器学习分为三个部分,第一部分是建立机器学习流程pipeline,第二部分是训练,第三部分是预测。 在建立机器学习流程pipeline中包含4个阶段,如下所示: 阅读全文
posted @ 2020-04-09 17:05 桌子哥 阅读(950) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——RDD、DataFrame和Spark SQL数据库相关操作
摘要:在Spark中可以使用RDD API、DataFrame API和Spark API这三个接口来进行数据的相关操作。且这三者也互相有联系,RDD没有定义框架,DataFrame在创建时必须定义Schema,而Spark SQL是由DataFrame派生出来的,此外Spark API适用于只有SQL操 阅读全文
posted @ 2020-04-07 17:36 桌子哥 阅读(453) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Python Spark MLlib决策树回归
摘要:机器学习领域中分类方法和回归方法是相对的,大多数的方法可以相互转换,即一般的机器学习方法如果可以分类的话,也会可以做回归预测。在本例的回归方法中,使用的评价指标是RMSE。 第一步:导入数据库 import sysfrom time import timeimport pandas as pdimp 阅读全文
posted @ 2020-04-06 15:30 桌子哥 阅读(420) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Python Spark MLlib Decision Tree MultiClassification多分类
摘要:二分类分类器大多可以用来进行开展多分类的问题,这篇以决策树为例来介绍Spark里MLlib的多分类问题实例,在这一篇中使用的评价指标是Accuracy。 第一步:导入库函数 import sysfrom time import timeimport pandas as pdimport matplo 阅读全文
posted @ 2020-04-05 23:30 桌子哥 阅读(436) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Python Spark MLlib Naive Bayes二分类
摘要:朴素贝叶斯是一种经典的分类方法,其原理在高中或大学的概率论部分学习了很多了,下面开始介绍在Spark环境下使用MLlib来使用Naive Bayes来对网站性质进行分类判断。 第一步:导入库函数 import sysfrom time import timeimport pandas as pdim 阅读全文
posted @ 2020-04-03 22:57 桌子哥 阅读(285) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Python Spark MLlib支持向量机二分类
摘要:支持向量机是一个应用很广的机器学习模型,利用核空间变换可以将数据从一个空间变换到另外一个空间当中,从而使得数据呈现出更清晰的分布。支持向量机不论是在工业界还是在学界都有举足亲重的意义,在学界,基于支持向量机的改进方法有很多,通过算法层面的改进可以得到一种针对特定数据情况的优质算法,从而能更好的解决实 阅读全文
posted @ 2020-04-03 17:16 桌子哥 阅读(610) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Python Spark MLlib逻辑斯蒂回归二分类
摘要:同上一部分的内容,在进行二分类问题时,逻辑斯蒂回归也是一种常用的分类方法。逻辑斯蒂回归使用了一个Sigmoid函数来作为核心的内容来实现分类的思想,接下里介绍在Pyspark中使用MLlib来实现逻辑斯蒂回归。 第一步:导入需要的库函数 import sysfrom time import time 阅读全文
posted @ 2020-04-03 15:47 桌子哥 阅读(476) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——Python Spark MLlib决策树二分类
摘要:决策树是在数据分类问题中的一种常用且经典的机器学习方法,在本例里使用决策树模型来分析StumbleUpon数据集,来预测网页是暂时的(ephemeral)还是长青的(evergreen),并且调教参数找出最佳的参数组合,来提高预测准确度。 像这类经典的二分类问题,在python中调包来做的话会非常容 阅读全文
posted @ 2020-04-02 21:58 桌子哥 阅读(605) 评论(0) 推荐(0) 编辑
Python+Spark2.0+hadoop学习笔记——实战之推荐引擎
摘要:推荐引擎是最常见的机器学习应用,在spark中,Spark MLlib支持ALS(Alternating Least Squares)推荐算法,是机器学习的协同过滤推荐算法。机器学习的协同过滤推荐算法用过观察所有用户给产品的评价来推断每个用户的喜好,并向用户推荐适合的多个产品,也可以把某一个产品推荐 阅读全文
posted @ 2020-04-01 14:20 桌子哥 阅读(533) 评论(0) 推荐(0) 编辑