数组(leetcode)
数组类型专刷
不忘初心_悟空
在职猿,北航路。
莫问前路凶吉,但求落幕无悔。
展开
-
215。数组中第K个最大元素(堆实现)
class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: """堆排序思想""" def heapify(array, start, end): while True: max_pos = start #初始化最大值所在位置为目标所在原创 2020-09-27 19:00:58 · 93 阅读 · 0 评论 -
169。多数元素(数组中出现次数大于n/2)
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [3,2,3]输出: 3class Solution: def majorityElement(self, nums: List[int]) -> int: num_key = {} n = len(nums) for num in nums: ...原创 2020-09-17 19:07:55 · 176 阅读 · 0 评论 -
167。两数之和II-输入有序数组(双指针方法-缩小范围)
给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: ...原创 2020-09-17 18:41:31 · 77 阅读 · 0 评论 -
122。买卖股票的最佳时机II(允许多次交易,贪心算法,相邻两天的最大利润进行累加)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。知识小梳理:贪心算法一般按如下步骤进行:①建立数学模型来描述问题 。②把求解的问题分成若干个子问题 。③对每个子问题求解,得到子问题的局部最优解 。④把子问题的解局部最优解合成原来解问题的一个解 。class Solution: def maxProfi原创 2020-09-17 12:17:05 · 347 阅读 · 0 评论 -
121。买卖股票的最大时机(非连续的数组中找最大的差值,双指针, 动态规划思想)
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。class Solution: def maxProfit(self, prices: List[int]) -> int: if len(prices)<1: return 0 min_price=prices[0] .原创 2020-09-17 11:39:32 · 89 阅读 · 0 评论 -
119。杨辉三角根据行的索引好进行所在行的输出
输入: 3输出: [1,3,3,1]class Solution: def getRow(self, rowIndex: int) -> List[int]: rowIndex = rowIndex + 1 res = [[1]*i for i in range(1, rowIndex+1)] //矩阵初始化 for i in range(2, rowIndex): for j in range(1, i):原创 2020-09-16 18:53:20 · 108 阅读 · 0 评论 -
118。杨辉三角(本元素为左上方和右上方两元素的和)
例如:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]class Solution: def generate(self, numRows: int) -> List[List[int]]: res = [[1] * i for i in range(1, numRows + 1)] // 矩阵初始化 for i in range(2, numRows): // for j原创 2020-09-15 11:09:48 · 75 阅读 · 0 评论 -
88。合并两个有序数组(双指针法)
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]class Solutin:原创 2020-09-15 10:45:19 · 133 阅读 · 0 评论 -
53。数组中的最大子序和(极简,非分治)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。class Solution: def maxSubArray(self, nums: List[int])—>int: for i in range(1, len(nums)): nums[i] = max(nums[i], nums[i-1] +原创 2020-09-14 10:53:19 · 51 阅读 · 0 评论 -
66。数组元素加一
加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。思路解析:非9加1. return是9置0, 继续循环如果+1后digits[0] = 0,则插入1在最前面,return。class Solution: def plusOne(self, digits: List[int]) -> List[int]: for i in ran原创 2020-09-14 10:46:56 · 609 阅读 · 0 评论 -
35。 (二分法实现)数组中搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。输入: [1,3,5,6], 5输出: 2class Solution: def searchInsert(self, nums: List[int], target: int) -> int: low=0 high=len(nums)-1 while(low<=high):原创 2020-09-11 14:56:18 · 102 阅读 · 0 评论 -
27。数组中移除与目标值相同元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素.class Solution: def removeElement(self, nums: List[int], val: int) -> int: i=0 while(i<=len(nums)-1原创 2020-09-11 14:53:29 · 100 阅读 · 0 评论 -
26。删除排序数组中重复的元素RemoveDuplicates(后续优化)
RemoveDuplicates给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。class Solution: def removeDuplicates(self, nums: List[int]) -> int: i = 0 while(i<len(nums)-1): if nums[i] == nums[i+原创 2020-09-11 12:43:46 · 959 阅读 · 0 评论 -
1。数组篇Two_Sum
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。nums = [2, 7, 11, 15]target = 9class Solution: def sum(self, nums, target): look_up = {} for i, num in enumerate(nums): if target-num in look_up: return look_up[target-num],i l原创 2020-09-10 12:45:41 · 76 阅读 · 0 评论