当前位置: 首页 > news >正文

常考常考高频率

1.快排(双指针)

快排,归并排序,堆排序

#快速排序O(nlogn)
def quick_sort(array, left, right):if left < right:mid = partition(array, left, right)quick_sort(array, left, mid)quick_sort(array, mid+1, right)return arraydef partition(array, left, right):pivot = array[left]while left < right:while (left <right and array[right]>= pivot):right -= 1array[left] = array[right]while (left< right and array[left] <= pivot):left += 1array[right] = array[left]array[left] = pivotreturn left
# 归并排序O(nlogn)
def merge(left, right):array = []while (len(left)>0 and len(right)>0):if left[0] < right[0]:array.append(left.pop(0))else:array.append(right.pop(0))array += leftarray += rightreturn arraydef merge_sort(array):if len(array) <= 1:  #如果array只有一个元素直接退出return arraymid = len(array)//2left = merge_sort(array[:mid])right = merge_sort(array[mid:])array_new = merge(left, right)return array_new

2. 第K大(快排or 堆)

力扣215.数组中的第K个最大的元素
912.排序数组

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:pivot = nums[0]small,equal,big = [],[],[]for i in nums:if i> pivot:big.append(i)elif i < pivot:small.append(i)else:equal.append(i)if len(big) >= k:return self.findKthLargest(big, k)elif len(big)< k and len(big) + len(equal)>=k:return pivotelse:return self.findKthLargest(small,k-len(big)-len(equal))

找到第K大的元素

'''快速排序'''
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:def partition(nums, left, right):pivot = nums[left]while left< right:while (left< right and nums[right]>=pivot):right -= 1nums[left] = nums[right]while (left<right and nums[left] <= pivot):left += 1nums[right] = nums[left]nums[left] = pivotreturn leftdef randomPartition(nums, left, right):   # 随机选择pivot,防止最坏情况nums是降序pivot_index = random.randint(left, right)nums[left], nums[pivot_index] = nums[pivot_index], nums[left]return partition(nums, left, right)def topKSplit(nums, left, right, k):  #找到第k小的元素,如果是第1小,则index=0mid = randomPartition(nums, left, right)if mid == k-1:return nums[mid]elif mid < k-1:return topKSplit(nums, mid+1, right, k)else:return topKSplit(nums, left, mid-1, k)n = len(nums)return topKSplit(nums, 0, n-1, n-k+1)  #第k大=第n-k+1小

堆排序???

'''堆排序'''
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:def maxHeapify(arr, i, end):j = 2*i + 1while j <= end:if j+1 <= end and arr[j+1] > arr[j]:j += 1if arr[i] < arr[j]:arr[i], arr[j] = arr[j], arr[i]i = jj = 2*i + 1else:breakdef maxHepify(arr, i, end):     # 大顶堆j = 2*i + 1                 # j为i的左子节点【建堆时下标0表示堆顶】while j <= end:             # 自上而下进行调整if j+1 <= end and arr[j+1] > arr[j]:    # i的左右子节点分别为j和j+1j += 1                              # 取两者之间的较大者if arr[i] < arr[j]:             # 若i指示的元素小于其子节点中的较大者arr[i], arr[j] = arr[j], arr[i]     # 交换i和j的元素,并继续往下判断i = j                       # 往下走:i调整为其子节点jj = 2*i + 1                 # j调整为i的左子节点else:                           # 否则,结束调整breakn = len(nums)# 建堆【大顶堆】for i in range(n//2-1, -1, -1):         # 从第一个非叶子节点n//2-1开始依次往上进行建堆的调整maxHepify(nums, i, n-1)# 排序:依次将堆顶元素(当前最大值)放置到尾部,并调整堆# k-1次重建堆(堆顶元素),或 k次交换到尾部(倒数第k个元素)for j in range(n-1, n-k-1, -1):nums[0], nums[j] = nums[j], nums[0]     # 堆顶元素(当前最大值)放置到尾部jmaxHepify(nums, 0, j-1)                 # j-1变成尾部,并从堆顶0开始调整堆return nums[-k]

3.滑动窗口的最大值(双端队列deque)

4. 岛屿数量 (dfs)

5. 二叉树遍历(队列等)

6. 旋转数组(二分)

7.完全平方数、零钱兑换(动态规划)

8.反转链表

http://www.lryc.cn/news/417225.html

相关文章:

  • Linux项目环境的搭建 (Red hat 9.0Linux操作系统)
  • Study--Oracle-08-ORACLE数据备份与恢复(一)
  • FreeIPA安装
  • mysql数据库:SQL语言基础和基本查询
  • strimzi operator 部署kafka集群(可外部访问)
  • 【网络安全】探索AI 聊天机器人工作流程实现RCE
  • 虚拟DOM、Vue渲染流程
  • centos7 启动python后端服务与停止服务的sh脚本
  • 访问网站显示不安全怎么办?
  • Scala与集合框架:高效数据处理的利器
  • 基于 JWT 的模拟登录爬取实战
  • 力扣(2024.08.06)
  • 如何快速入门 PyTorch ?
  • Qt 快速部署环境(windeployqt.exe)
  • 白骑士的PyCharm教学实战项目篇 4.2 数据分析与可视化
  • el-form-item,label在上方显示,输入框在下方展示
  • Centos7.9操作系统kdump crash文件vmcore未生成问题
  • 找不到符号 javax.servlet.WriteListener
  • 智能仪表板DevExpress Dashboard v24.1 - 新增级联参数过滤
  • 计算机网络-CSP初赛知识点整理
  • MySQL第1讲--详细安装教程和启动方法
  • SQL创建数据表的一些语句
  • Spring Boot实战:拦截器
  • <数据集>战斗机识别数据集<目标检测>
  • 【python】Python中位运算算法详细解析与应用实战
  • vba 保存word里面的图片_1分钟批量处理100张图片,有Word在
  • Android进阶之路 - 字体加粗,定制化字体粗度
  • ForkJoin框架的解析
  • 使用IDEA2019.1.4创建“hello world”java程序
  • 学习vue3 五,传送,缓存组件以及过渡和过渡列表