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

网页制作与网站开发用的软件营销型网站策划书

网页制作与网站开发用的软件,营销型网站策划书,花生壳可做网站吗,html教学题目 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 一、代码实现(快速选择…

题目

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

一、代码实现(快速选择算法)

import ("math/rand""time"
)func findKthLargest(nums []int, k int) int {rand.Seed(time.Now().UnixNano())return quickSelect(nums, 0, len(nums)-1, k)
}func quickSelect(nums []int, left, right, k int) int {if left == right {return nums[left]}pivotIndex := rand.Intn(right-left+1) + leftpivotVal := nums[pivotIndex]// 三路分区low, mid, high := left, left, rightfor mid <= high {if nums[mid] > pivotVal {nums[low], nums[mid] = nums[mid], nums[low]low++mid++} else if nums[mid] == pivotVal {mid++} else {nums[mid], nums[high] = nums[high], nums[mid]high--}}leftLength := low - leftif k <= leftLength {return quickSelect(nums, left, low-1, k)}midLength := high - low + 1if k <= leftLength+midLength {return pivotVal}return quickSelect(nums, high+1, right, k-(leftLength+midLength))
}

二、算法分析

1. 核心思路
  • 快速选择算法:基于快速排序的分治思想,但每次仅递归处理包含目标的子数组。
  • 三路分区:将数组划分为大于、等于、小于基准值的三部分,减少不必要的递归。
  • 随机基准:随机选择基准值避免最坏情况,确保平均时间复杂度为O(n)。
2. 关键步骤
  1. 随机基准选择:随机选取一个元素作为基准值pivotVal
  2. 三路分区操作
    • low指针左侧元素均大于pivotVal
    • mid遍历数组,将元素分类到对应区域。
    • high指针右侧元素均小于pivotVal
  3. 递归决策
    • 若左区长度≥k,递归处理左区。
    • 若k在左区和中区总长内,直接返回pivotVal
    • 否则递归处理右区,调整k值。
3. 复杂度
指标说明
时间复杂度O(n)平均情况,每次处理规模减半
空间复杂度O(log n)递归调用栈深度(最坏O(n),随机化避免)

三、图解示例

在这里插入图片描述

四、边界条件与扩展

1. 特殊场景验证
  • 全相同元素:如[3,3,3], k=2,直接返回3。
  • k=1或k=n:处理最大或最小元素。
  • 逆序/顺序数组:随机基准确保效率。
2. 扩展应用
  • 前k大元素:修改返回逻辑收集元素。
  • 流式数据:结合堆结构处理动态数据。
  • 多维数据:定义合适比较规则处理复杂结构。
3. 多语言实现
import randomdef findKthLargest(nums, k):def quick_select(left, right, k):if left == right:return nums[left]pivot_index = random.randint(left, right)pivot_val = nums[pivot_index]low, mid, high = left, left, rightwhile mid <= high:if nums[mid] > pivot_val:nums[low], nums[mid] = nums[mid], nums[low]low += 1mid += 1elif nums[mid] == pivot_val:mid += 1else:nums[mid], nums[high] = nums[high], nums[mid]high -= 1if k <= low - left:return quick_select(left, low-1, k)elif k <= (low - left) + (high - low +1):return pivot_valelse:return quick_select(high+1, right, k - (low - left + high - low +1))return quick_select(0, len(nums)-1, k)
import java.util.Random;public class Solution {private static final Random rand = new Random();public int findKthLargest(int[] nums, int k) {return quickSelect(nums, 0, nums.length - 1, k);}private int quickSelect(int[] nums, int left, int right, int k) {if (left == right) return nums[left];int pivotIndex = rand.nextInt(right - left + 1) + left;int pivotVal = nums[pivotIndex];int low = left, mid = left, high = right;while (mid <= high) {if (nums[mid] > pivotVal) {swap(nums, low++, mid++);} else if (nums[mid] == pivotVal) {mid++;} else {swap(nums, mid, high--);}}int leftLen = low - left;if (k <= leftLen) return quickSelect(nums, left, low - 1, k);int midLen = high - low + 1;if (k <= leftLen + midLen) return pivotVal;return quickSelect(nums, high + 1, right, k - (leftLen + midLen));}private void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

五、总结与优化

1. 算法对比
方法优势适用场景
快速选择平均O(n)大规模数据求Top k
适合动态数据实时处理流数据
排序后取数实现简单小规模数据
2. 工程优化
  • 尾递归优化:减少递归栈深度。
  • 迭代实现:改用循环结构避免栈溢出。
  • 内存优化:处理原数组避免额外空间。
3. 扩展方向
  • 并行处理:多线程加速分区过程。
  • 适应性优化:根据数据分布自动选择策略。
  • 稳定性增强:处理元素相等时的稳定性需求。
http://www.dtcms.com/wzjs/109703.html

相关文章:

  • 网站建设如何做用户名密码今天微博热搜前十名
  • 张家口网站建设阿里云域名注册入口官网
  • vps 网站 需要绑定域名吗seo研究协会网是干什么的
  • 活动网页怎么做苏州搜索引擎排名优化商家
  • 陕西省住房城乡建设部门户网站昆明关键词优化
  • 抄袭网站怎么办个人小白如何做手游代理
  • 七台河新闻联播2021济南做seo的公司排名
  • 哪些网站可以做电脑画画赚钱商丘网站建设公司
  • 建设网站实训报告书淘宝关键词排名查询
  • 做资讯类网站需要什么资质全国最新疫情实时状况地图
  • 乌鲁木齐正规网站建设电话seo技术员
  • 做网站一定要学java吗简单的seo
  • b2b网站开发经验手机创建网站教程
  • 哪些网站做夜场女孩多公司网站建设开发
  • 做任务领积分兑换别的网站上的会员新郑网络推广
  • 怎么让公司建设网站可以打广告的平台
  • html代码颜色表山东seo百度推广
  • 关于动物自己做的网站所有代刷平台推广
  • 广西工程建设质量管理协会网站买外链
  • 淘宝客建网站怎么申请网址
  • 兰州模板网站建设安庆seo
  • 大香蕉网站人人做上海网站seo策划
  • 鸿鑫建设集团有限公司网站seo在线短视频发布页运营
  • 网站建设背景需要写些什么软件重庆seo网页优化
  • 做淘宝用什么批发网站郑州网站优化排名
  • wordpress 前台登录插件合肥网络公司seo建站
  • 做网站找我图片搜索引擎推广的方法有
  • 杭州建筑工程网seo网站推广首页排名
  • 国外网站搜索引擎优化方案制作网站需要多少费用
  • 桐城市美丽乡村建设专题网站网站推广的方式