锦标赛

  1. 这题小编能力有限,还望大佬解决
  2. 题目描述
  3. 如果要在n个数据中挑选出第一大和第二大的数据(要求输出数据所在位置和值),使用什么方法比较的次数最少?我们可以从体育锦标赛中受到启发。
  4. 如图【1.png】所示,8个选手的锦标赛,先两两捉对比拼,淘汰一半。优胜者再两两比拼...直到决出第一名。
  5. 第一名输出后,只要对黄色标示的位置重新比赛即可。
  6. 下面的代码实现了这个算法(假设数据中没有相同值)。
  7. 代码中需要用一个数组来表示图中的树(注意,这是个满二叉树, 不足需要补齐)。它不是存储数据本身,而是存储了数据的下标。
  8. 第一个数据输出后,它所在的位置被标识为-1
  9. class A{
  10. //a 表示待处理的数据,长度如果不是2的次幂,则不足位置补为-1
  11. static void pick(int[] a)
  12. {
  13. int n = 1;
  14. while(n<a.length) n *= 2;
  15. int[] b = new int[2*n-1];
  16. for(int i=0; i<n; i++){
  17. if(i<a.length)
  18. b[n-1+i] = i;
  19. else
  20. b[n-1+i] = -1;
  21. }
  22. //从最后一个向前处理
  23. for(int i=b.length-1; i>0; i-=2){
  24. if(b[i]<0){
  25. if(b[i-1]>=0)
  26. b[(i-1)/2] = b[i-1];
  27. else
  28. b[(i-1)/2] = -1;
  29. }
  30. else{
  31. if(a[b[i]]>a[b[i-1]])
  32. b[(i-1)/2] = b[i];
  33. else
  34. b[(i-1)/2] = b[i-1];
  35. }
  36. }
  37. //输出树根
  38. System.out.println(b[0] + ": " + a[b[0]]);
  39. //值等于根元素的位置需要重新pk
  40. pk(a,b,0,b[0]);
  41. //再次输出树根
  42. System.out.println(b[0] + ": " + a[b[0]]);
  43. }
  44. // a 表示待处理数据,b 二叉树,k 当前要重新比拼的位置,v 已经决胜出的值
  45. static void pk(int[] a, int[] b, int k, int v)
  46. {
  47. int k1 = k*2+1;
  48. int k2 = k1 + 1;
  49. if(k1>=b.length || k2>=b.length){
  50. b[k] = -1;
  51. return;
  52. }
  53. if(b[k1]==v)
  54. pk(a,b,k1,v);
  55. else
  56. pk(a,b,k2,v);
  57. //重新比较
  58. if(b[k1]<0){
  59. if(b[k2]>=0)
  60. b[k] = b[k2];
  61. else
  62. b[k] = -1;
  63. return;
  64. }
  65. if(b[k2]<0){
  66. if(b[k1]>=0)
  67. b[k] = b[k1];
  68. else
  69. b[k] = -1;
  70. return;
  71. }
  72. if(__________________________) //填空
  73. b[k] = b[k1];
  74. else
  75. b[k] = b[k2];
  76. }
  77. }
  78. 请仔细分析流程,填写缺失的代码。
  79. 通过浏览器提交答案,只填写缺失的代码,不要填写已有代码或其它说明语句等。

java实现第五届蓝桥杯锦标赛的更多相关文章

  1. java实现第五届蓝桥杯殖民地

    殖民地 带着殖民扩张的野心,Pear和他的星际舰队登上X星球的某平原.为了评估这块土地的潜在价值,Pear把它划分成了M*N格,每个格子上用一个整数(可正可负)表示它的价值. Pear要做的事很简单- ...

  2. java实现第五届蓝桥杯LOG大侠

    LOG大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力- 变换的规则是: 对其某个 ...

  3. java实现第五届蓝桥杯生物芯片

    生物芯片 X博士正在研究一种生物芯片,其逻辑密集度.容量都远远高于普通的半导体芯片. 博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮. 这些光源的 ...

  4. java实现第五届蓝桥杯供水设施

    供水设施 X星球的居民点很多.Pear决定修建一个浩大的水利工程,以解决他管辖的N个居民点的供水问题.现在一共有N个水塔,同时也有N个居民点,居民点在北侧从1号到N号自西向东排成一排:水塔在南侧也从1 ...

  5. java实现第五届蓝桥杯排列序数

    排列序数 如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号: abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bac ...

  6. java实现第五届蓝桥杯幂一矩阵

    幂一矩阵 天才少年的邻居 atm 最近学习了线性代数相关的理论,他对"矩阵"这个概念特别感兴趣.矩阵中有个概念叫做幂零矩阵.对于一个方阵 M ,如果存在一个正整数 k 满足 M^k ...

  7. java实现第五届蓝桥杯斐波那契

    斐波那契 标题:斐波那契 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 ...

  8. java实现第五届蓝桥杯神奇算式

    神奇算式 题目描述 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求 ...

  9. java实现第五届蓝桥杯扑克序列

    扑克序列 AA223344,一共4对扑克牌.请你把它们排成一行. 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌. 4A3A2432, 2342A3A4 请填写出 ...

随机推荐

  1. python机器学习笔记:EM算法

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域的基础,比如隐式马尔科夫算法(HMM),LDA主题模型的变分推断算法等等.本文对于E ...

  2. org.springframework.web.bind.annotation不存在 site:blog.csdn.net(IDEA中运行springboot时报错)

    原因:MAVEN版本与IDEA版本不兼容问题, maven虽然更新比较慢,但是最新的3.6.6在与IDEA2019版本及以下版本兼容时会出现以上问题 解决办法:重新配置一个3.6低级别版本的maven ...

  3. 理解css属性的继承和覆盖

    首先,我们梳理一下哪些属性会被继承 文本 color 颜色,a元素除外 direction 方向 font 字体 font-family 字体系列 font-style 字体风格 font-size ...

  4. SpringMVC底层执行原理

    一个简单的HelloSpringMVC程序 先在web,xml中注册一个前端控制器(DispatcherServlet) <?xml version="1.0" encodi ...

  5. JS 如何获取自定义属性

    <script>var testEle = document.getElementById("test"); testEle.setAttribute("de ...

  6. 存储系列之 Linux ext2 概述

    引言:学习经典永不过时. 我们之前介绍过存储介质主要是磁盘,先介绍过物理的,后又介绍了虚拟的.保存在磁盘上的信息一般采用文件(file)为单位,磁盘上的文件必须是持久的,同时文件是通过操作系统管理的, ...

  7. CF #459 D. MADMAX

    D. MADMAX time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  8. HTML5移动端最新兼容问题解决方案

    1.安卓浏览器看背景图片,有些设备会模糊.用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网 ...

  9. 解决docker创建的elasticsearch-head容器不能连接elasticsearch等问题

    在使用docker创建elasticsearch-head容器去连接elasticsearch的时候,容易出两个问题 1.不能连接elasticsearch 修改elasticsearch.yml文件 ...

  10. [C#] [VS] Snippets快捷代码块之 Region

    代码长了,阅读起来不方便, 于是,C#中我们经常会用 region来折叠代码块. 在VS中,输入 #region , 点Tab,会自动生成如下: #region MyRegion #endregion ...