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

建筑公司网站模板免费下载郑州市建设教育协会网站

建筑公司网站模板免费下载,郑州市建设教育协会网站,虚拟主机能建设网站吗,国外网站空间 月付目录 面试题 68 : 查找插入位置 面试题 69 : 山峰数组的顶部 面试题 68 : 查找插入位置 题目#xff1a; 输入一个排序的整数数组 nums 和一个目标指 t#xff0c;如果数组 nums 中包含 t#xff0c;则返回 t 在数组中的下标#xff1b;如果数组 nums 中不包含 t#…目录 面试题 68 : 查找插入位置 面试题 69 : 山峰数组的顶部 面试题 68 : 查找插入位置 题目 输入一个排序的整数数组 nums 和一个目标指 t如果数组 nums 中包含 t则返回 t 在数组中的下标如果数组 nums 中不包含 t则返回将 t 按顺序插入数组 nums 中的下标。假设数组中没有相同的数字。例如输入数组 nums 为 [1, 3, 6, 8]如果目标值 t 为 3则输出 1如果 t 为 5则返回 2。 分析 首先考虑如果目标值 t 不在数组中时它应该被插入哪个位置。由于数组是排序的因此它应该排在所有比它小的数字的后面。也就是说它的插入位置满足两个条件一是该位置上的数字大于 t二是该位置的前一个数字小于 t总结下来就是数组中第一个大于 t 的数字的位置。例如当数组为 [1, 3, 6, 8]目标值为 5它将被插入下标为 2 的位置该位置当前的值为 6大于目标值该位置的前一个值是 3小于目标值。 当数组中包含目标值时返回它在数组中的位置。 综上所述即查找数组中第一个大于或等于 t 的数字的位置。 代码实现 class Solution { public:int searchInsert(vectorint nums, int target) {int left 0;int right nums.size() - 1;while (left right){int mid (left right) / 2;if (nums[mid] target)left mid 1;else  // nums[mid] targetright mid - 1;}return left;} }; 当 while 循环结束left rightleft 左边的数字都小于 targetright 右边的数字都大于或等于 target因此 right 1即 left 就是第一个大于或等于 target 的数字的位置。 面试题 69 : 山峰数组的顶部 题目 符合下列属性的数组 arr 称为山峰数组 arr.length 3 存在 i0 i arr.length - 1 使得arr[0] arr[1] ··· arr[i - 1] arr[i] arr[i 1] ··· arr[arr.length - 1] 给定由整数组成的山峰数组 arr返回下标 i即山峰顶部数组中最大值的位置。 例如在数组 [1, 3, 5, 4, 2] 中最大值是 5输出它在数组中的下标 2。 分析 不难想到直观的解法来解决这个题目即逐一扫描整个数组通过比较就能找出数组中的最大值。显然这种解法的时间复杂度是 O(n)。这种解法对任意数组都适用并没有充分利用这个题目的特点即数组先递增再递减。由于问题是关于在排序数组中查找数字虽然整个数组并不是排序的但分成前后两段后每段都分别排序因此二分查找算法值得一试。 山峰数组中的最大值是数组中唯一一个比它左右两边数字都大的数字。位于最大值前面的数字除第 1 个数字之外总是比它前一个数字大但比它后一个数字小位于最大值后面的数字除最后一个数字之外总是比它前一个数字小但比它后一个数字大。 可以根据山峰数组的这个特点应用二分查找算法。先取出数组中间的数字。 如果这个数字比它前后两个数字都大那么就找到了数组的最大值。 如果这个数字比它前一个数字大但比后一个数字小那么这个数字位于数组递增的部分数组的最大值一定在它的后面接下来只需要在数组的后半部分查找就可以。 如果这个数字比它前一个数字小但比后一个数字大那么这个数字位于数组递减的部分数组的最大值一定在它的前面接下来只需要在数组的前半部分查找就可以。 代码实现 class Solution { public:int peakIndexInMountainArray(vectorint arr) {int left 1;int right arr.size() - 2;while (left right){int mid (left right) / 2;if (arr[mid] arr[mid - 1] arr[mid] arr[mid 1])return mid;if (arr[mid] arr[mid - 1])left mid 1;elseright mid - 1;}return -1;} }; 注意 在一个长度为 n 的山峰数组中由于第 1 个数字和最后一个数字都不可能是最大值因此初始查找范围为数组下标从 1 到 n - 2 的部分。 如果输入的数组是一个有效的山峰数组那么 while 循环中一定能找到山峰数组的最大值。只是 C 的语法要求函数的每个分支必须有返回值所以在函数体的最后添加一行返回 -1 的代码。实际上这一行代码不会被执行。
http://www.hkea.cn/news/14507178/

相关文章:

  • 用thinkphp做的网站wordpress 比分插件
  • 做渠道的网站有哪些方面建设官方网站需要注意什么
  • 在中国建设工程造价管理协会网站如何做电商网站视频
  • 2018爱情动做网站祥云平台官方网站
  • 可以做行程的网站wordpress语言代码
  • 海南网站建设公司wordpress 添加播放器
  • 江津网站建设口碑wordpress调用某指定分类栏目
  • 做社交的招聘网站作业网站的设计制作案例
  • asp.net网站开发技术海口网站建设网站制作
  • 网络水果有哪些网站可以做巫山做网站哪家强
  • 用cms做网站的缺点怎么做seo关键词优化
  • 浅蓝色.net企业网站源码带后台手机界面设计网站
  • 定制网站建设需要多少钱h5游戏是什么
  • 如何建立自己公司的官方网站seo专业培训机构杭州
  • 百度显示网站名网站管理过程
  • 晋城建设网站北京官网
  • 做购物网站适合的服务器高端品牌网站建设需要注意什么
  • 郑州网站优化公司哪家好海口专注海南网站建设
  • 校园招聘哪个网站做的好免费包装设计网
  • 网站建设技术团队经验丰富建设银行网站信任
  • 做暧暧视频网站安全吗游戏娱乐网站建设
  • 网站建设 中企动力鄂ICP备网站 设计 文档
  • 网站建站建设网站苏州公司企业网站建设
  • 搜索引擎网站推广法深圳网站建设yuntianxia
  • 花都网站建设公司包头市建设工程质量监督站网站
  • 服装网站建设目标客户9元建站节
  • 手机域名网站怎么做世界互联网峰会2022
  • 泰兴市淘宝网站建设新开传奇网站迷失版
  • 做网站空间怎样制作h5
  • WordPress网站htm地图iis能搭WordPress