200道大数据面试常考Leetcode算法题--数组篇02(python带代码解析)
Posted 一条肥雷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了200道大数据面试常考Leetcode算法题--数组篇02(python带代码解析)相关的知识,希望对你有一定的参考价值。
往期内容在这里:
大家好,继续为大家推荐200道大数据面试常考Leetcode算法题,这期为--数组篇,附带解析,都是从Leetcode官网总结大神们的解法(在这里感谢大神的帮助,我只是个搬运工!)每篇更新5篇,一共更新数组篇20篇,艾瑞巴迪和我一起刷起来!!
200道大数据面试常考Leetcode算法题(数组篇)35- 搜索插入位置
Leetcode原题:
题解为 :
class Solution: def searchInsert(self, nums: List[int], target: int) -> int: if not nums: return nums # 定义左节点 left = 0 # 定义右节点 right = len(nums) - 1 # 从左开始向右循环 while(left <= right): # 找到重中点 mid = (left + right) // 2 # 假如中点为目标数 if(nums[mid] == target): return mid # 目标数是否在右边 if(nums[mid] < target): # 则左节点从中点右边开始 left = mid+1 # 目标数在左边 else: # 则右节点从中点左边开始 right = mid -1 # 跳出循环时,left 指向 target 插入位置,返回 left return left
200道大数据面试常考Leetcode算法题(数组篇)39-组合总和Ⅰ
Leetcode原题:
题解为:
def combinationSum(self, nums: List[int], target: int) -> List[List[int]]: ans=[] for i in range(len(nums)): # 若target-nums[i]<0,则以nums[i]为首元素无符合的组合 if target-nums[i]<0: continue elif target-nums[i]==0: # 若target-nums[i]=0,则[nums[i]]即为唯一符合的组合 ans.append([nums[i]]) # 若target-nums[i]>0,则递归调用函数(以target-nums[i]为目标,nums[i:]为可用数组) else: ans+=[[nums[i]]+rest for rest in self.combinationSum(nums[i:],target-nums[i])] return ans
200道大数据面试常考Leetcode算法题(数组篇)40-组合总和Ⅱ
Leetcode原题:
题解为:
class Solution: def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: # 特判,若candidatescandidates为空,则返回[] if(not candidates): return [] # 数组长度循环次数 n=len(candidates) # 排序 candidates.sort() res=[] # 回溯函数helper()helper(), # 传入参数:下一加和索引ii,当前已加和数组tmptmp,下一目标targettarget def helper(i,tmp,target): # 若target==0target==0,说明当前和满足条件, # 将当前加和数组tmptmp加入resres,并return。 print(i,tmp,target) if(target==0): res.append(tmp) return # 若target==0target==0, # 说明当前和满足条件,将当前加和数组tmptmp加入resres,并return。 if(i==n or target<candidates[i]): return # 对于j遍历区间[i,n)(为了防止数组越界,首先保证j>i,判断是否和上一元素相等),分为以下两种情况: for j in range(i,n): # 若满足条件j>i and candidates[j] == candidates[j-1]j>iandcandidates[j]==candidates[j−1],则跳过,避免出现重复解,同时也进行了剪枝。 if(j>i and candidates[j]==candidates[j-1]): continue # 否则,执行helper(j+1,tmp+[candidates[j]],target-candidates[j]) helper(j+1,tmp+[candidates[j]],target-candidates[j]) # 执行helper(0,[],target)helper(0,[],target),并返回resres helper(0,[],target) return res
200道大数据面试常考Leetcode算法题(数组篇)48-旋转图形
Leetcode原题为:
题解为:
class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ # 初始数组的长度 n = len(matrix) # 双层循环类似二维数组,先转置,对角线不变,行列相反 for i in range(n): for j in range(i+1,n): matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j] # 然后再关于中点对称即可 mid = n//2 for j in range(mid): for i in range(n): matrix[i][j],matrix[i][n-j-1] = matrix[i][n-j-1,matrix[i][j]
200道大数据面试常考Leetcode算法题(数组篇)54-螺旋矩阵
Leetcode原题为:
题解为:
class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: # 特殊判断 if not matrix : return [] res = [] # 对数组循环3次 while matrix: # 直接取出取出第一行 res.extend(matrix.pop(0)) # 下一个矩阵 next_matrix = [] # 对剩下的两行就是转置 for x in zip(*matrix): # 添加到下一矩阵,即下一矩阵为竖着的矩阵 next_matrix.append(x) # 重新赋值矩阵,不断取出第一行 matrix = next_matrix[::-1] return res
好啦,这期的分享到这里结束啦!我们下期(数组篇03)再见!
以上是关于200道大数据面试常考Leetcode算法题--数组篇02(python带代码解析)的主要内容,如果未能解决你的问题,请参考以下文章