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

珠海网站建设杰作软件开发上海

珠海网站建设杰作,软件开发上海,c2c网站建站的标准,长春网站制作的公司哪家好题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 #xff0c;两者长度都是 n #xff0c;再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。 对于选择的下标 i0 #xff0c;i1 #xff0c;…#xff0c; ik - 1 #xff0c;你的 分数 …题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 两者长度都是 n 再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。 对于选择的下标 i0 i1 … ik - 1 你的 分数 定义如下 nums1 中下标对应元素求和乘以 nums2 中下标对应元素的 最小值 。 用公式表示 (nums1[i0] nums1[i1] … nums1[ik - 1]) * min(nums2[i0] , nums2[i1], … ,nums2[ik - 1]) 。 请你返回 最大 可能的分数。 一个数组的 子序列 下标是集合 {0, 1, …, n-1} 中删除若干元素得到的剩余集合也可以不删除任何元素。 一、代码实现贪心优先队列 import (container/heapsort )func maxScore(nums1 []int, nums2 []int, k int) int64 {n : len(nums1)pairs : make([][]int, n)for i : 0; i n; i {pairs[i] []int{nums2[i], nums1[i]}}sort.Slice(pairs, func(i, j int) bool {return pairs[i][0] pairs[j][0]})h : minHeap{}heap.Init(h)total : 0maxScore : 0for _, pair : range pairs {num2, num1 : pair[0], pair[1]heap.Push(h, num1)total num1if h.Len() k {total - heap.Pop(h).(int)}if h.Len() k {current : total * num2if current maxScore {maxScore current}}}return int64(maxScore) }type minHeap []intfunc (h minHeap) Len() int { return len(h) } func (h minHeap) Less(i, j int) bool { return h[i] h[j] } func (h minHeap) Swap(i, j int) { h[i], h[j] h[j], h[i] } func (h *minHeap) Push(x interface{}) { *h append(*h, x.(int)) } func (h *minHeap) Pop() interface{} {old : *hn : len(old)x : old[n-1]*h old[:n-1]return x }二、算法分析 1. 核心思路 排序策略将元素按nums2的值降序排列确保每次处理当前可能的子序列最小值。贪心选择维护一个最小堆动态保留当前最大的k个nums1值。实时计算当堆满k个元素时立即计算当前可能的最大分数。 2. 关键步骤 数据预处理 将nums1和nums2的元素配对并按nums2降序排列。 堆维护过程 使用最小堆动态维护最大的k个nums1值。每当堆元素超过k时弹出最小值以保持堆大小。 分数计算 每次堆满k个元素时计算当前和与当前nums2最小值的乘积更新最大分数。 3. 复杂度 指标值说明时间复杂度O(n log n)排序主导时间复杂度空间复杂度O(n)存储排序后的元素对 三、图解示例 四、边界条件与扩展 1. 特殊场景验证 全相同元素当所有nums2值相同时正确选取最大的k个nums1值。k等于数组长度此时必须全选分数为总和乘以最小值。大数值测试验证算法在极大数值时的正确性。 2. 扩展应用 动态k值调整支持k值根据条件变化时快速重新计算。多维约束增加其他维度的限制条件进行筛选。分布式计算处理超大规模数据时分布式排序和堆维护。 3. 多语言实现 import java.util.*;public class Solution {public int maxScore(int[] nums1, int[] nums2, int k) {int n nums1.length;int[][] pairs new int[n][2];for (int i 0; i n; i) {pairs[i][0] nums2[i];pairs[i][1] nums1[i];}Arrays.sort(pairs, (a, b) - b[0] - a[0]);PriorityQueueInteger heap new PriorityQueue();long total 0;long maxScore 0;for (int[] pair : pairs) {int num2 pair[0];int num1 pair[1];heap.offer(num1);total num1;if (heap.size() k) {total - heap.poll();}if (heap.size() k) {maxScore Math.max(maxScore, total * num2);}}return (int) maxScore;} }import heapqdef maxScore(nums1, nums2, k):# 将nums2和nums1的元素配对并按nums2的值降序排列pairs sorted(zip(nums2, nums1), keylambda x: -x[0])heap []total 0max_score 0for num2, num1 in pairs:# 将当前nums1的值加入堆heapq.heappush(heap, num1)total num1# 如果堆的大小超过k弹出最小的元素if len(heap) k:removed heapq.heappop(heap)total - removed# 当堆中恰好有k个元素时计算当前分数if len(heap) k:current_score total * num2if current_score max_score:max_score current_scorereturn max_score五、总结与优化 1. 算法对比 方法优势适用场景贪心优先队列时间效率高需要动态维护最大值暴力枚举实现简单小规模数据动态规划可处理复杂约束需要状态转移的情况 2. 工程优化 内存优化在原数组上操作减少内存消耗。并行排序使用多线程加速大规模数据排序。剪枝策略提前终止不可能产生更优解的分支。 3. 扩展方向 在线处理支持数据流动态添加元素。多目标优化同时考虑多个目标函数的最优解。近似算法针对超大数据设计近似解法。
http://www.zqtcl.cn/news/215406/

相关文章:

  • 中国建设银行网站开通短信企业搭建自己的网站
  • 苏州网站维护云梦县城乡建设局网站
  • 分类信息导航网站模板建设银行网站每天几点更新
  • 百度竞价排名规则及费用seo怎么做整站排名
  • 网站免费模板资源商标设计一般多少钱
  • 视频微网站开发谷歌怎么做网站推广
  • 微信公众号服务号网站开发流程网站推广网络
  • 徐州网站建设技术wordpress 分辨 模版
  • 慈溪企业网站建设公司wordpress网盘搜索引擎源码
  • 建筑类企业网站模板怎么制作网站链接
  • 常州网站建设外包襄阳做网站的
  • 临清网站优化用jsp做网站的感想
  • 个人工作室网站网站备案 万网
  • 网络推广模板网站会员管理软件
  • 西乡塘网站建设网站建设公司的成本有哪些方面
  • 在哪里可以学习做网站西安制作公司网站的公司
  • 网站建设 更新 维护淮北矿业工程建设公司网站
  • 网站开发 平台宝应做网站
  • 网站开发开题报告广州的兼职网站建设
  • 辽宁同鑫建设网站网站后期维护费用
  • 政法网站建设有哪些不足广州网站建设信息科技有限公司
  • 营销型网站 平台海口智能建站价格
  • 网站空间过期电商网站建设比较好的
  • seo公司 彼亿营销舆情优化公司
  • diango是做网站的后端吗网页怎么做成app
  • 思勤传媒网站建设公司如何查询网站的外链
  • 网站设计思路文案范文专业手机网站建设多少钱
  • 有部分网站打不开网站服务内容怎么写
  • 百度安全网站检测好看的免费的小说网站模板
  • 锡山区住房和城乡建设局网站免费ppt模板下载简约