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

网站开发职业生涯规划范文网页设计版式教程

网站开发职业生涯规划范文,网页设计版式教程,建立网站费用怎么做会计分录,网站建站知识在编程竞赛,尤其是参与蓝桥杯的过程中,遇到各种问题需求是家常便饭。最近,我遇到了一个非常有趣且颇具挑战性的算法问题。问题描述如下:对于一个长度为n的数组(n是10的倍数),数组中的每个元素均…

在编程竞赛,尤其是参与蓝桥杯的过程中,遇到各种问题需求是家常便饭。最近,我遇到了一个非常有趣且颇具挑战性的算法问题。问题描述如下:对于一个长度为n的数组(n是10的倍数),数组中的每个元素均为区间内的整数。任务是通过对数组中的元素进行调整,使得每个元素出现的次数都相同(即每种数各出现n/10次),同时需要保证调整的总代价最小。

在初始阶段,我差点就被这个问题难住了。问题本身看似简单——让每种数字出现频率相等,但实际要找到最小代价的实现却需要深思熟虑的策略。毕竟,单纯的试错代价过于巨大,我们必须要有明确的方向性。

算法思路如下:

  • 首先需要对数组中的每个数字进行计数,明确各数字出现的次数。
  • 其次,要明确每次更改操作的代价。这意味着我们需要为数组中的每个元素ai记录一个更改代价bi
  • 然后考虑如何以最小代价达到目标状态。由于频率超出或低于目标频率n/10的元素都需要调整,因此我们需要采取一个有效策略,以保证在必要时优先调整代价最小的元素。

解决方案:

我采用了贪心算法来逐渐接近目标状态。贪心算法在多种情况下都极为有效,尤其是在需要进行多步决策的问题中,我们可以在每一步选择当前最优的解决方案。

为了实现这个策略,我创建了一个按照bi排序的元素列表来保证在调整过程中,我们总是优先选择调整代价较低的元素。通过不断的选择最小代价的元素进行调整,我得以逐步使每个数字的出现次数向目标值n/10靠近,直至达成平衡。

在编程实践中,我遇到了一些边缘情况,比如当多个数字的出现次数都超出或低于目标频率n/10时,选择哪一个调整就变得更为微妙,我不得不在算法中添加额外的逻辑来处理这些情况。

在无数次的调试、优化后,我的算法成功通过了所有测试用例,并且在实际比赛中取得了不错的成绩。这个问题不仅提升了我的算法设计能力,更重要的是教会了我在面对挑战时不断探索和实践的重要性。

import java.util.*;public class BalanceArray {static class Pair {int num;int cost;Pair(int num, int cost) {this.num = num;this.cost = cost;}}public static int minCostToBalance(int[] nums, int[] costs) {int n = nums.length;int target = n / 10;int totalCost = 0;int[] frequency = new int[10];List<Pair> pairs = new ArrayList<>();// 统计每个数字的出现频率,并创建代价数组for (int i = 0; i < n; i++) {frequency[nums[i]]++;pairs.add(new Pair(nums[i], costs[i]));}// 按照代价进行排序pairs.sort(Comparator.comparingInt(pair -> pair.cost));// 调整频率高于和低于目标的数,使得频率达到平衡for (int i = 0; i < pairs.size(); i++) {Pair p = pairs.get(i);while (frequency[p.num] > target) {frequency[p.num]--;totalCost += p.cost;}}// 若有数频率仍然过低,需要从已降低数的集合中选择最小代价和进行调整for (int i = 0; i < pairs.size(); i++) {Pair p = pairs.get(i);while (frequency[p.num] < target) {frequency[p.num]++;totalCost += p.cost;}}return totalCost;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];int[] costs = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();costs[i] = scanner.nextInt();}scanner.close();int result = minCostToBalance(nums, costs);System.out.println(result);}
}

总结我的学习经历,关键在于理解了算法不仅是编程的一项基本技能,更是一种可应用于各类问题解决的工具。勇于尝试、耐心思考和有效调整是走向成功的重要步骤。

随着时间的推进,我对算法的理解将会更加深入,而我相信,在这个过程中,我不仅会成为一个更出色的程序员,也将不断增强解决实际问题的能力。在未来的编程之路上,我期待遇到更多的挑战,而这个问题无疑已经为我铺设了一段坚实的基石。

http://www.hyszgw.com/news/41995.html

相关文章:

  • 怎么可以自己制作网站湛江企业建站程序
  • 公司做一个静态网站多少钱吉林省吉林市是几线城市
  • 做建筑材料的网站有哪些wordpress4.9教程pdf
  • 重庆如何做聚政网站网站建设与管理专业就业前景
  • 灵璧做网站公司冰雪蜜城店加盟费多少
  • 建设行业公司网站新手学做百度联盟网站
  • 手机移动网站设计统帅装修怎么样
  • 做t恤的网站海南网站搭建价格
  • 一个企业做网站推广的优势煤矿建设工程质量监督总站网站
  • 什么网站免费建设小企业做网站多少钱
  • 湖北随州住房和城乡建设部网站网站优化软件哪个好
  • 健身网站设计模板下载汽车网站建设参考文献开题报告
  • 电子商务 网站前台功能php导航网站
  • 江苏设计网站电话湖南省住建云公共信息服务平台
  • 邯郸做外卖网站的公司鄂尔多斯网站推广
  • 什么叫网站被k个人网站做哪些流程
  • 建网站工具广告设计平面设计
  • 网站设计机构排行榜网络营销方式哪些?
  • wordpress需要多少内存中小型企业网站优化推广
  • 怎么进成品网站后台网站建设干货图书
  • 移动互联网站建设做网站销售有前景吗
  • 网站官方首页设计富阳区建设工程质监站网站
  • 建设网站群的意义怎么做网络游戏
  • 手机如何创建简易网站网站栏目怎么
  • 网站怎么做电脑系统下载软件网站建设需要php吗
  • 邢台哪儿做wap网站好电商平台网站开发
  • 一个空间可以建多个网站外贸公司名字大全洋气
  • 崇州市网站建设上饶市住房和城乡建设网站
  • 公网站建设苏州网站建设免费
  • 做专属淘客网站wordpress打不开主页