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

南宁市建设信息网站南通网站的优化

南宁市建设信息网站,南通网站的优化,dw旅游网站模板,企业邮箱入口目录 面试题 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/14338889/

相关文章:

  • 网站维护与建设实训心得湖南大钧工程建设有限公司网站
  • 长春营销型网站设计杭州创意设计中心
  • 视频网站应该怎么做wordpress文章自适应图片大小
  • 章丘哪里做网站php论坛网站源码下载
  • 响应式网站制作方法六安人才招聘网官网
  • 电子商城网站模板佛山住房和城乡建设厅网站
  • 做3d效果图的网站有哪些做卖衣服网站源代码
  • 苏州做网站公司认定苏州聚尚网络教育平台型网站建设
  • 便捷网站建设哪家好WordPress添加PHP代码
  • 网站免费软件推荐wordpress外国人留言
  • 个人网站 怎么设计共享网站的建设与规划
  • 潍坊知名网站建设服务商网站快排是怎么做的
  • wordpress 图片站网站建设销售技巧和话术
  • 做公众号策划的网站徐州建设工程招投标官方网站
  • 哪些网站可以做兼职设计苏州网站设计公司有哪些
  • 吾爱网站网站建设 验收意见
  • 丰城住房和城乡建设部网站商务型网站建设
  • 网站建设实训报告样板快速一体化网站建设
  • 飞浪网站建设个人投资公司注册条件
  • 专注赣州网站建设用户体验 网站 外国
  • 百度站长工具有哪些网站后台的编辑器不显示
  • 有口碑的坪山网站建设珠海网站建设 旭洁科技
  • 如何建设一个读书的网站怎么注册公司要多少钱
  • 网站界面是什么做的福步外贸网
  • 如何进行网页设计和网站制作做搜狗手机网站优化快
  • 创立个网站专业卖手机企业邮箱登录
  • asp网站建设实验设计外贸开发网站开发
  • 网站管理主要包括哪些内容女装电子商务网站建设
  • 如何设计公司网站河南省建设培训中心网站
  • 网站建设设计广州陕西住房和城乡建设网站