100. Search Insert Position
2016-01-27 16:14
387 查看
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
Subscribe to see which companies asked this question
分析:给定一个排好序的非递减数组和关键字target,如果target在数组中存在,则返回target在数组中第一次出现的下标。如果target不在数组中存在 ,则返回target应该插入的下标。前半部分采用二分查找的方式找元素下标,如果查找到则返回的下标为该元素在数组中首次出现的下标。用二分查找得到一个下标low,由于初始化和循环的控制条件,这个low在nums的合法下标内,所以可以直接判断如果nums[low]>=target, 则返回low即可。否则返回low+1.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
Subscribe to see which companies asked this question
分析:给定一个排好序的非递减数组和关键字target,如果target在数组中存在,则返回target在数组中第一次出现的下标。如果target不在数组中存在 ,则返回target应该插入的下标。前半部分采用二分查找的方式找元素下标,如果查找到则返回的下标为该元素在数组中首次出现的下标。用二分查找得到一个下标low,由于初始化和循环的控制条件,这个low在nums的合法下标内,所以可以直接判断如果nums[low]>=target, 则返回low即可。否则返回low+1.
/** * 给定一个排好序的非递减数组和关键字target,如果target在数组中存在,则返回target在数组中第一次出现的下标。 * 如果target不在数组中存在 ,则返回target应该插入的下标。 * 前半部分采用二分查找的方式找元素下标,如果查找到则返回的下标为该元素在数组中首次出现的下标。 * 用二分查找得到一个下标low,由于初始化和循环的控制条件,这个low在nums的合法下标内,所以可以直接判断如果nums[low]>=target, * 则返回low即可。否则返回low+1. * */ public int searchInsert(int[] nums, int target) { int high = nums.length - 1; int low = 0; int mid = 0; while (low < high) {// 注意1对应注意2 mid = low + (high - low) / 2; // 这样先减后加是为了防止溢出 if (nums[mid] < target) { low = mid + 1; } else { high = mid; // 注意2 } } // low出循环的时候肯定是在[0,high],都是数组的正常合法的下标。 /* 出了while循环的low和high都已经被改变了,不再是初始化时的low和high */ if (nums[low] >= target) {//如果nums[low]比target大或者二者相等,则low即为target的插入位置 return low; } else { return low + 1; } }
相关文章推荐
- java获取工作日
- nagios插件之监控if8接口日志(新接口)
- MyBatis之七:使用generator工具
- Angularjs $http get post区别
- Ar Unity for Android(一)
- MongoDB的安装
- 日积月累--exception记录
- Python基础教程笔记——条件,循环和其他语句
- emaGpmuJ.55
- tmux使用
- Unity shader saturate
- windows phone 获取所在经纬度和地名
- Unity中创建自己的mesh以及动态修改mesh
- 走迷宫2
- 网络数据包收发流程(三):e1000网卡和DMA
- 一个php 字符串判断问题
- 如何使用Assetic进行文件管理
- Struts的莫名问题解决方法:Attribute class invalid for tag present according to TLD
- phpmailer笔记
- lideyi