中山市西区网站制作,电子商务网站建设与维护李建忠下载,微网站绑定域名,php网站开发专业背景给定一个数组#xff0c;在区间内从左到右查找中间值#xff0c;每次查找最小值与最大值区间内的中间值#xff0c;且这个区间元素数量不小于3。
例如
1.给定数组float[] data { 1, 2.3f, 4, 5.75f, 8.125f, 10.5f, 13, 15, 20 }
输出#xff1a;10.5、5.75、4、2.3、8…给定一个数组在区间内从左到右查找中间值每次查找最小值与最大值区间内的中间值且这个区间元素数量不小于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
解释
1201/210.5首先从整个数组中获取中间值
210.51/25.75从左边开始计算左边为1也就是区间[1,10.5]此区间元素数量大于2因此需要计算
315.75/23.375左边为1也就是区间[1,5.75]此区间元素数量大于2因此需要计算数组中不存在3.375找最接近的4
414/22.5左边为1也就是区间[1,4]此区间元素数量大于2因此需要计算数组中不存在2.5找最接近的2.3
左边查找结束查找右边
55.7510.5/28.125区间[5.7510.5]此区间元素数量大于2因此需要计算
68.125与10.5区间[8.12510.5]此区间元素数量等于2因此不需要计算
710.520 /215.25区间[10.520]此区间元素数量大于2因此需要计算数组中不存在找最接近的15
810.515/212.75先找左边区间区间[10.515]此区间元素数量大于2因此需要计算数组中不存在找最接近的13
915与20之间无结束。 2.给定数组float[] data { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
输出5、3、2、4、7、6、8
代码 public static Queuefloat FindMiddle(float[] data){if (data.Length 3) return new Queuefloat();int leftIndex 0;int rightIndex data.Length - 1;Queuefloat queue new Queuefloat(data.Length - 2);FindMiddle(data, leftIndex, rightIndex, queue);return queue;}static void FindMiddle(float[] data, int leftIndex, int rightIndex, Queuefloat 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;}}}
思路从左边查找中间值直到找完后找右边一直到结束