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.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

问题:给定一个已排序数组和一个整数,若整数已在数组中则返回在数组中的下标,否则返回应当插入的位置。

对一个已排序数组进行搜索,很自然地会想到二分搜索(Binary Search),毕竟是经典场景。这道题也确实是二分搜索的一个简单应用。

之所以记录这道题目,是感觉二分搜索和之前做的 双指针法 two pointers ,或者是滑动窗口算法(sliding window) 有些相似。

二分搜索,实际上,可以理解为每次减半的滑动窗口算法,来定位最终的目标位置。

而滑动窗口算法,另一个典型场景就是求解最大/最小 的连续子数组,或连续子字符串。在另一篇博文有介绍:Minimum Size Subarray Sum 。

 int searchInsert(vector<int>& nums, int target) {

     if (nums.size() == ) {
return ;
} if (nums.size() == ) {
return (nums[] < target) ? : ;
} int l = ;
int r = (int)nums.size() - ; while (l < r) { if (l + == r) {
if ( target <= nums[l]) {
return l;
}
else if (target <= nums[r]){
return r;
}
else{
return r+;
}
} int mid = (l + r) / ; if (nums[mid] == target) {
return mid;
} if (nums[mid] < target) {
l = mid;
}else{
r = mid;
}
} // 实际上无法执行到这里,在前面必然有 return.
return ;
}

最新文章

  1. 安装odoo服务
  2. css用背景图来替换文字来达到隐藏文字的目的
  3. NodeJS Debugger
  4. NOIP2016 D2T1 組合數問題(problem)
  5. nginx 如何显示真实ip
  6. Spring摘记
  7. HDU1496 hash
  8. tcp/ip详解 卷1 -- 链路层
  9. 英文面试&amp;笔试
  10. jmeter 压测最近的心得体会
  11. IT项目管理十大要素
  12. (二 -4) 天猫精灵接入Home Assistant-自动发现Mqtt设备--传感器系列
  13. 前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)
  14. route 配置默认网关
  15. Spark安装与介绍
  16. [No000017A]改善C#程序的建议3:在C#中选择正确的集合进行编码
  17. redhat6.4 gcc g++ rpm方式安装步骤
  18. [UE4]添加机器人
  19. DevExpress ImageComboBoxEdit增加
  20. 【转】vc api 录音

热门文章

  1. Android SwitchButton(滑动开关)
  2. UITableView显示不全
  3. ShareSDK 社会化分享 集成步骤
  4. RadioGroup单选按钮排版
  5. html图像入门
  6. Phonegap 版本minSdkVersion为8的时候的自动更新与升级
  7. Swift - 36 - 结尾闭包(Trailing closure)和捕获数值(Capturing Values)的简单介绍
  8. log4j的配置及使用
  9. ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)
  10. [Python 3.x 官方文档翻译]The Python Tutorial Python教程