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) 编辑
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) 编辑
Leetcode练习(Python):数组类:第216题:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。
摘要:题目: 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 思路: 这种情况下使用递归 程序: class Solution: def combinationSum3(self,
阅读全文
posted @
2020-04-25 19:34
桌子哥
阅读(514)
推荐(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) 编辑
Leetcode练习(Python):数组类:第154题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。
摘要:题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。 说明: 这道题是 寻找旋转排序数组中的最小值 的延伸题目。 允许重复会影响算法的时间
阅读全文
posted @
2020-04-25 17:20
桌子哥
阅读(429)
推荐(0) 编辑
Leetcode练习(Python):数组类:第153题:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。
摘要:题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [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) 编辑
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) 编辑
Leetcode练习(Python):数组类:第219题:给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
摘要:题目: 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。 思路: 使用哈希就很简单了。 程序: class Solution: def containsNearbyDuplica
阅读全文
posted @
2020-04-24 16:41
桌子哥
阅读(576)
推荐(0) 编辑
Leetcode练习(Python):数组类:第217题:给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
摘要:题目: 给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 思路: 题目思路简单。 程序: class Solution: def containsDuplicate(self, nums: List[
阅读全文
posted @
2020-04-24 16:01
桌子哥
阅读(2239)
推荐(0) 编辑
Leetcode练习(Python):数组类:第189题:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
摘要:题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 说明: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 要求使用空间复杂度为 O(1) 的 原地 算法。 思路: 本题思路简单。 程序: class Solution: def rotate(self,
阅读全文
posted @
2020-04-24 15:36
桌子哥
阅读(1121)
推荐(0) 编辑
Leetcode练习(Python):数组类:第169题:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。
摘要:题目: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 思路: 使用哈希非常方便 程序: class Solution: def majorityElement(self, nums
阅读全文
posted @
2020-04-24 15:20
桌子哥
阅读(1551)
推荐(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) 编辑
Leetcode练习(Python):数组类:第106题:根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。
摘要:题目: 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 思路: 与第105题类似,区别是前序遍历一开始找的是左子树的结点,后续遍历一开始找的是右子树的结点,因为从后面开始找数字。 程序: # Definition for a binary tree node. #
阅读全文
posted @
2020-04-24 13:45
桌子哥
阅读(238)
推荐(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) 编辑
Leetcode练习(Python):数组类:第90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。
摘要:题目: 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 思路: 与第78题思路一样,用迭代法,对重复的数据进行判断再进行操作就可以。 程序: class Solution: def subsetsWithDup(self, nums:
阅读全文
posted @
2020-04-24 13:04
桌子哥
阅读(602)
推荐(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) 编辑
Leetcode练习(Python):数组类:第84题:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。
摘要:题目: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路: 自己想的方法类似于接雨水的问题,但是计算量在有的例子的时候太大,超时了,参考的别人的方法,就是使用栈和哨兵的思路,这个思路的程序设计的很巧妙。 程
阅读全文
posted @
2020-04-23 18:55
桌子哥
阅读(946)
推荐(0) 编辑