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

C#面试题: 寻找中间值

给定一个数组,在区间内从左到右查找中间值,每次查找最小值与最大值区间内的中间值,且这个区间元素数量不小于3。

例如

1.给定数组float[] data = { 1, 2.3f, 4, 5.75f, 8.125f, 10.5f, 13, 15, 20 }

输出:10.5、5.75、4、2.3、8.125、15、13

解释:

1)(20+1)/2=10.5,首先从整个数组中获取中间值;

2)(10.5+1)/2=5.75,从左边开始计算,左边为1,也就是区间[1,10.5],此区间元素数量大于2,因此需要计算;

3)(1+5.75)/2=3.375,左边为1,也就是区间[1,5.75],此区间元素数量大于2,因此需要计算;数组中不存在3.375,找最接近的4;

4)(1+4)/2=2.5,,左边为1,也就是区间[1,4],此区间元素数量大于2,因此需要计算;数组中不存在2.5,找最接近的2.3;

左边查找结束,查找右边

5)(5.75+10.5)/2=8.125,区间[5.75,10.5],此区间元素数量大于2,因此需要计算;

6)8.125与10.5,区间[8.125,10.5],此区间元素数量等于2,因此不需要计算;

7)(10.5+20 )/2=15.25,区间[10.5,20],此区间元素数量大于2,因此需要计算;数组中不存在,找最接近的15

8)(10.5+15)/2=12.75,先找左边区间,区间[10.5,15],此区间元素数量大于2,因此需要计算;数组中不存在,找最接近的13

9)15与20之间无,结束。

2.给定数组float[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }

输出:5、3、2、4、7、6、8

代码:

 public static Queue<float> FindMiddle(float[] data){if (data.Length < 3) return new Queue<float>();int leftIndex = 0;int rightIndex = data.Length - 1;Queue<float> queue = new Queue<float>(data.Length - 2);FindMiddle(data, leftIndex, rightIndex, queue);return queue;}static void FindMiddle(float[] data, int leftIndex, int rightIndex, Queue<float> queue){if (rightIndex - 1 <= leftIndex) return;float target = (data[leftIndex] + data[rightIndex]) / 2f;int middleIndex = FindClosestNum(data, leftIndex, rightIndex, target, out float value);queue.Enqueue(value);FindMiddle(data, leftIndex, middleIndex, queue);FindMiddle(data, middleIndex, rightIndex, queue);}static int FindClosestNum(float[] nums, int leftIndex, int rightIndex, float target, out float middle){int left = leftIndex;int right = rightIndex;int mid = 0;float temp;while (left <= right){mid = left + ((right - left) >> 1);temp = nums[mid];if (temp == target){middle = temp;return mid;}else if (temp < target)left = mid + 1;elseright = mid - 1;}if (right < 0){middle = nums[left];return left;}else if (left >= nums.Length){middle = nums[right];return right;}else{if (Math.Abs(nums[left] - target) < Math.Abs(nums[right] - target)){middle = nums[left];return left;}else{middle = nums[right];return right;}}}

思路:从左边查找中间值,直到找完后找右边,一直到结束

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

相关文章:

  • 987: 输出用先序遍历创建的二叉树是否为完全二叉树的判定结果
  • 13:HAL---SPI
  • 微服务---gateway网关
  • HTML4(二)
  • SpringBoot 扩展篇:ConfigFileApplicationListener源码解析
  • 蓝桥杯省三爆改省二,省一到底做错了什么?
  • Unity EventSystem入门
  • 第4章 Vim编辑器与Shell命令脚本
  • javaWeb快速部署到tomcat阿里云服务器
  • [MQTT]Mosquitto的內網連接(intranet)和使用者/密碼權限設置
  • 某盾BLACKBOX逆向关键点
  • 【2024全国青少年信息素养大赛初赛时间以及模拟题】
  • 2024年软件测试最全jmeter做接口压力测试_jmeter接口性能测试_jmeter压测接口(3),【大牛疯狂教学
  • LLM——用于微调预训练大型语言模型(LLM)的GPU内存优化与微调
  • Telnet协议:远程控制的基石
  • 网络工程师必备:静态路由实验指南
  • springboot利用切面保存操作日志(支持Spring表达式语言(简称SpEL))
  • 遂宁专业知识付费系统报价,免费网课平台怎么开通?需要哪些条件?
  • 【linuxC语言】fcntl和ioctl函数
  • java——继承(一)
  • 【Linux】进程间通信方式之管道
  • 【Linux】yum与vim
  • 苍穹外卖Day06笔记
  • Maximo 使用 REST API 创建 Cron Task
  • 【镜像仿真篇】磁盘镜像仿真常见错误
  • 代码随想录算法训练营DAY45|C++动态规划Part7|70.爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数
  • Linux(openEuler、CentOS8)企业内网DHCP服务器搭建(固定Mac获取指定IP)
  • c#读取hex文件方法,相对来说比较清楚
  • 【ytb数据采集器】按关键词批量爬取视频数据,界面软件更适合文科生!
  • 三条命令快速配置Hugging Face