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

网站建设服务器端软件2023新闻摘抄十条

网站建设服务器端软件,2023新闻摘抄十条,12333上海公共招聘网登录,网站开发和安卓开发文章出处#xff1a;极客时间《数据结构和算法之美》-作者#xff1a;王争。该系列文章是本人的学习笔记。 思考题目 1 用最省内存的方式查找数据。 2 快速定位ip所在省市 二分查找的速度 二分每次都通过跟区间中的中间元素对比#xff0c;将待查找的区间缩小为一半极客时间《数据结构和算法之美》-作者王争。该系列文章是本人的学习笔记。 思考题目 1 用最省内存的方式查找数据。 2 快速定位ip所在省市 二分查找的速度 二分每次都通过跟区间中的中间元素对比将待查找的区间缩小为一半直到区间为0或者找到元素。需要重点关注退出条件、mid取值、low和high的更新。 二分的时间复杂度O(logn)。logn少的惊人之处和指数的大的惊人之处类似。2的32次方是4亿多。在4亿多有序数组中查找数据只需要32次。很少吧。 简单代码实现 简单是因为数组中没有重复数据。 public static int easySearch(int[] a,int value){if(anull) return -1;int n a.length;int low 0;int high n-1;return easySearch(a, value, low, high);}private static int easySearch(int[] a,int value,int low,int high){if(lowhigh) return -1;int mid low ((high-low)1);if(valuea[mid]) return mid;if(valuea[mid]) return easySearch(a,value,low,mid-1);return easySearch(a,value,mid1,high);}二分的应用场景 1 二分依赖的是顺序表也就是数组。链表复杂度变高。因为链表随机查找的时间复杂度是O(n)。 如果使用链表第一次查找a[mid]需要n2\dfrac{n}{2}2n​次查找第二次查找a[mid]需要n4\dfrac{n}{4}4n​次查找依次类推所需要的查找有sumn2n4n8....1n−1sum\dfrac{n}{2}\dfrac{n}{4}\dfrac{n}{8}....1n-1sum2n​4n​8n​....1n−1。时间复杂度O(n)。 2 二分针对的是有序数据。在插入、删除比较少的场景中可以将排序的时间成本均摊到查询上面。插入、删除多则复杂度升高。 3 数据量小不能体现二分的优势。例如10个数据。无论顺序查找还是二分时间差不多。 4 数据量不能太大。因为二分依赖数组存储数据数组要求连续的内存。 思考题 在100M内存中查找1000万整数的某个数。如果用long表示整数一个整数8个字节1000万整数80M内存。可以先使用空间复杂度低的排序算法排序之后二分查找。 求一个数的平方根精确到小数点后6位。 二分的变体 查找第一个等于value的元素的位置 public static int findFirstEqualElement(int[] a ,int value){if(anull) return -1;int n a.length;int low 0;int high n-1;while(lowhigh){int mid low ((high-low)1);if(valuea[mid]){high mid - 1;}else if(valuea[mid]){low mid 1;}else{if(mid0 || a[mid-1]!value)return mid;elsehigh mid-1;}}return -1;}最后一个等于value的元素的位置 public static int findLastEqualElement(int[] a ,int value){if(anull) return -1;int n a.length;int low 0;int high n-1;while(lowhigh){int mid low ((high-low)1);if(valuea[mid]){high mid - 1;}else if(valuea[mid]){low mid 1;}else{if(midn-1 || a[mid1]!value)return mid;elsehigh mid-1;}}return -1;}查找第一个大于等于value的元素的位置 public static int findFirstMoreOrEqualElement(int[] a ,int value){if(anull) return -1;int n a.length;int low 0;int high n-1;while(lowhigh){int mid low ((high-low)1);if(valuea[mid]){if(mid0 || a[mid-1]value) return mid;high mid - 1;}else if(valuea[mid]){low mid 1;}}return -1;}查找最后一个小于等于value的元素的位置 public static int findLastLessOrEqualElement(int[] a ,int value){if(anull) return -1;int n a.length;int low 0;int high n-1;while(lowhigh){int mid low ((high-low)1);if(valuea[mid]){high mid - 1;}else if(valuea[mid]){if(midn-1 || a[mid1]value)return mid;low mid 1;}}return -1;}思考题 快速定位ip所在省市。可以用一个32位的int表示一个ip地址。查找每一个ip段内最后一个起始ip小于等于目标ip的ip段然后查找目标ip是不是在这个范围内。 循环有序数据的二分查找怎么解决,数组是升序。  需要先找到第一个a[i]lt;a[i1]a[i]lt;a[i1]a[i]a[i1]例如数组nums{4,5,6,7,0,1,2}。i应该等于4。然后我们可以选择将数组复制一下成为{0,1,2,4,5,6,7}但是这样时间复杂度就会是O(n)。我们也可以这样看nums[4]0,nums[5]1,nums[6]2,nums[7]4,nums[8]5,nums[9]6,nums[10]6。相当于将nums看做是一个循环数组。 public int search(int[] nums, int target) {int n nums.length;int low 0;int high n-1;while(lowhigh){int mid (lowhigh)/2;if(nums[mid]nums[high]){low mid 1;}else{high mid;}}int rotatedIndex low;low 0;high n-1;while(lowhigh){int mid (lowhigh)/2;int realMid (midrotatedIndex)%n;if(nums[realMid]target){low mid1;}else if(nums[realMid]target){high mid-1;}else{return realMid;}}return -1;}
http://www.huolong8.cn/news/301131/

相关文章:

  • le网站源码哪些行业做网站的多
  • 管理网站怎么做的官网好看的公司
  • 三亚学做网站培训wordpress网站文件目录
  • 深圳网站搜索引擎优化h5动画用什么软件做
  • 知名的环保行业网站开发常德网站建设开发公司
  • 网站建设大作业选题医院咨询
  • 网站跳转至手机端如何做法语网站建设
  • 2017网站建设报价方案wordpress 文章页名称
  • 手机做兼职的网站网站落地页如何做
  • 自己建设网站需要什么服务好的网站开发
  • 中升乙源建设公司网站手工制作花朵
  • 漳州网站建设到博大赞买个网站域名要多少钱一年
  • 网站制作哪家最好关于申请网站建设经费的报告
  • 自己怎样优化网站广州网站公司推广建设
  • 装饰工程东莞网站建设生产erp管理系统app
  • 医疗室内设计网站推荐淮安高端网站制作
  • 网站访问速度 云主机wordpress最快的电商主题
  • wordpress 收费主题破解版合肥seo服务
  • 成立一个网站平台要多少钱建设网站前台费用
  • 品牌管理公司网站建设搜索引擎如何找到网站
  • 专业微信网站成都网站排名优化报价
  • 常德网站建设网站北京装饰公司十大排名
  • 怎样用模块做网站自己做的网站打开慢
  • 南阳seo网站建设费用抖音广告
  • 网站备案照片背景上海seo优化外包公司
  • 联雅网站建设专业网站推广服务咨询
  • 差异基因做聚类分析网站建筑模板网
  • 刚做外贸最好用哪个网站wordpress刷新不管用
  • 我的班级网站模板室内设计学校专业
  • 企业门户网站设计工商管理网站