博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LC.34. Search for a Range
阅读量:6425 次
发布时间:2019-06-23

本文共 2309 字,大约阅读时间需要 7 分钟。

https://leetcode.com/problems/search-for-a-range/description/
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1].
For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].
 
1 public int[] searchRange(int[] nums, int target) { 2         //corner case:  3         if(nums == null || nums.length == 0) return new int[]{-1,-1};  4  5         /*question to ask: if there is only one item in the array, then return new int[]{index, index} 6          */ 7         int left = 0, right = nums.length -1 ;  8         //find the 1st occurance  9         int firstIndex = findFirst(nums, target); 10         //find the last occurance 11         int lastIndex = findLast(nums, target); 12         return new int[]{firstIndex, lastIndex} ; 13     }14     private int findFirst (int[] nums, int target){15         int left = 0 , right = nums.length - 1 ; 16         while(left + 1< right){17             int mid = left + (right - left)/2 ; 18             if(nums[mid] == target){19                 right = mid ; 20             } else if(nums[mid] < target){21                 left = mid ; 22             } else {23                 right = mid ; 24             }25         }26         //post processing: first occurance 27         if(nums[left] == target){28             return left ; 29         }30         if(nums[right] == target){31             return right ; 32         }33         return -1 ; 34     }35 36     private int findLast (int[] nums, int target){37         int left = 0 , right = nums.length - 1 ; 38         while(left + 1< right){39             int mid = left + (right - left)/2 ; 40             if(nums[mid] == target){41                 left = mid ; 42             } else if(nums[mid] < target){43                 left = mid ; 44             } else {45                 right = mid ; 46             }47         }48         //post processing: first occurance 49         if(nums[right] == target){50             return right ; 51         }52         if(nums[left] == target){53             return left ; 54         }55         return -1 ; 56     }

 

转载于:https://www.cnblogs.com/davidnyc/p/8621210.html

你可能感兴趣的文章
Java 动态太极图 DynamicTaiChi (整理)
查看>>
微信公众平台后台编辑器上线图片缩放和封面图裁剪功能
查看>>
git使用教程2-更新github上代码
查看>>
张掖百公里,再次折戟
查看>>
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
查看>>
本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
查看>>
图解SSIS监视文件夹并自动导入数据
查看>>
Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
查看>>
MyBatis Review——开发Dao的方法
查看>>
技术研发国产化进程加快 看传感器企业如何展示十八般武艺
查看>>
技术助力第三次革命
查看>>
《HTML与CSS入门经典(第8版)》——2.6 总结
查看>>
新手指南:在 Ubuntu 和 Fedora 上安装软件包
查看>>
在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器
查看>>
大型网站的 HTTPS 实践(二):HTTPS 对性能的影响
查看>>
《Swift 权威指南》——第6章,第6.10节嵌套函数
查看>>
《自己动手做交互系统》——1.3 本章小结
查看>>
Mobile devices bundled with malware?
查看>>
《JavaScript面向对象精要》——1.5 访问属性
查看>>
《Python数据可视化编程实战》—— 第 1 章 准备工作环境
查看>>