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

北京营销型网站建设培训做网站搜爬闪

北京营销型网站建设培训,做网站搜爬闪,抖音带运营的执行老大,杭州今天查出多少阳性目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介绍 …

目录

  • 前言
  • 问题介绍
  • 解决方案
  • 代码编写
    • java语言版本
    • c语言版本
    • c++语言版本
  • 思考感悟
  • 写在最后

前言

当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~

在此感谢左大神让我对算法有了新的感悟认识!

问题介绍

原问题
给定一个无序数组arr,求数组arr排好序之后,相邻数间的最大差值
如:
arr = [1,9,10]
结果为 9 - 1 = 8

解决方案

原问题
1、首先创建一个桶数组,每一个桶只记录当前桶中的最大值和最小值,桶数组的长度为arr.len-1
2、获取整个数组中的最大值和最小值,将最大值放入bucket[arr.len]
3、计算桶的范围,(最大值-最小值)/桶数量-1
4、根据桶范围和每一个值,计算出来每一个值的桶编号,放入桶中
5、遍历桶,计算最长的空桶子数组,将该子数组的前后桶拿出来,后桶的最小值-前桶的最大值即可。

代码编写

java语言版本

原问题:
方法一:

    /*** 二轮测试:获取数组排序后相邻之间的最大值* @param arr* @return*/public static int getMaxSubCp1(int[] arr) {if (arr == null || arr.length == 0) {return -1;}if (arr.length == 1) {return 0;}// 桶个数int bNum = arr.length+1;// 桶列表,这里长度不会改变的使用数组类型Record[] records = new Record[bNum + 1];init(records);Record maxAndMin = getMaxAndMin(arr);int max = maxAndMin.getMaxValue();int min = maxAndMin.getMinValue();// 桶中的范围int dis = (int)Math.ceil((max - min + 1) / (bNum-1));// 最大值放入最后一个桶records[bNum].updateMaxOrMin(max);// 剩下的开始分类放入桶中for (int i = 0; i < arr.length; i++) {if (max == arr[i]) {continue;}// 桶号int bucketNum = (arr[i] - min) / dis;records[bucketNum].updateMaxOrMin(arr[i]);}// 找到桶中第一个不为空的indexint noEmpty = 0;while (records[noEmpty].isEmpty()) {noEmpty++;}// 记录上一个非空位置int lastNoEmpty = noEmpty;int res = 0;// 循环找到除当前位置外的非空桶while (noEmpty < records.length) {if (noEmpty != lastNoEmpty && !records[noEmpty].isEmpty()){// 找到一个res = Math.max(res, records[noEmpty].getMinValue() - records[lastNoEmpty].getMaxValue());lastNoEmpty = noEmpty;}noEmpty++;}return res;}/*** 初始化* @param records*/private static void init(Record[] records) {for (int i = 0; i < records.length; i++) {records[i] = new Record(Integer.MIN_VALUE, Integer.MAX_VALUE);}}/*** 获取arr中的最值* @param arr* @return*/private static Record getMaxAndMin(int[] arr) {int min = arr[0];int max = arr[0];for (int i = 0; i < arr.length; i++) {min = Math.min(arr[i], min);max = Math.max(arr[i], max);}return new Record(max, min);}/*** 每一个桶只记录最大值和最小值就行*/protected static class Record {private Integer maxValue;private Integer minValue;private LinkedList<Integer> bucket;public Record(Integer maxValue, Integer minValue) {this.maxValue = maxValue;this.minValue = minValue;}/*** 拓展构造函数* @param maxValue* @param minValue* @param bucket*/public Record(Integer maxValue, Integer minValue, LinkedList<Integer> bucket) {this.maxValue = maxValue;this.minValue = minValue;this.bucket = bucket;}public Integer getMaxValue() {return maxValue;}public void setMaxValue(Integer maxValue) {this.maxValue = maxValue;}public Integer getMinValue() {return minValue;}public void setMinValue(Integer minValue) {this.minValue = minValue;}/*** 判断当前值是否能够更新最值* @param value*/public void updateMaxOrMin(int value) {this.maxValue = Math.max(this.maxValue, value);this.minValue = Math.min(this.minValue, value);}/*** 当前桶是否为空* 最值没有更新过*/public boolean isEmpty() {return this.maxValue == Integer.MIN_VALUE && this.minValue == Integer.MAX_VALUE;}}public static void main(String[] args) {System.out.println(getMaxSubCp1(new int[]{1,3,9,10}));}

c语言版本

正在学习中

c++语言版本

正在学习中

思考感悟

这里有几个点需要注意一下:
1、桶的长度为arr.len+1,但是除了最大值外,其他的数都不能到最大的桶中,这个就是通过计算范围时,除数是桶数-1来控制的,并且向上取整来保证。
2、桶的个数比arr的长度多一个1,就表示一定会出现一个或者多个空桶,那么我就想假如是1~10,桶个数是11个,间隔是1,这样的话,出现空桶也只能计算出来最大长度是1,如果存在间隔为2的,一定会出现两个空桶。
3、第三个问题就是计算空桶最大长度的问题,刚开始我觉得要求连续的空桶长度,那么要两个游标,在计算完成后,一个游标要循环到下一个空桶段的起点,然后再开始继续判断,其实换一种思路来看,连续的桶也可以看成是空桶段,只不过空桶段中没有空桶而已,所以问题就变成了,如果当前index不是起点并且不是空桶,那么就计算长度,并将当前位置作为下一个的起点,整个思路的代码量就减少了很多。这个解释有点不太好理解,大家可以借鉴一下最后那个计算最长空桶段的代码。

写在最后

方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!

http://www.yayakq.cn/news/500212/

相关文章:

  • 就业服务网站建设方案设计公司资质类别和等级
  • 阿里巴巴国际站下载电脑版网站建设竞标需要怎么做
  • 政协网站建设要求深圳网站建设知名 乐云践新
  • 网站上的高清动态图怎么做的高校思政主题网站建设的意义
  • 生成静态网站宝安新桥h5网站建设步骤
  • 做基础网站主机要?vs2008如何新建网站
  • 个人求职网站html镇江网站制作价格
  • 德阳哪里有做网站的六安网站制作哪里有
  • 做暖暖的视频网站网页ui设计流程
  • 域名频道注册域名上海排名seo公司
  • 校园网站建设情况说明深圳市新房备案价查询官网
  • 网站备案的要求冬奥会网页设计代码
  • 网站排名首页前三位如何开通有赞微商城
  • 网站建设与维护是什么内容自己做网站 怎样下载模板
  • 东莞微网站建设公司山东东营市经济怎么样
  • 炒币网站开发seo网站搜索优化
  • app开发 网站建设hmm船公司网站
  • 网站设计行业吃香么游戏开发专业
  • 静态手机网站html博客网页完整代码
  • 菏泽公司做网站网站建设应考虑哪些方面的问题
  • 建设部执业注册网站网站页面怎么算
  • 嘉兴网站建设培训免费网站建设平台
  • 微信彩票网站网站建设房产网站制作模板
  • 做微网站多少钱河南艾特网站建设
  • 沈阳做机床的公司网站优化网站架构
  • 南山免费做网站公司排名东莞东坑网站设计
  • 做互联网需要网站吗什么网站建设
  • 网站收录下降长沙房产网站
  • 福州网站免费制作保定网站开发
  • 上海营销型网站建设平台直播网站app下载