LeetCode Search for a Range
来源:互联网 发布:果壳网 知乎 编辑:程序博客网 时间:2024/06/06 17:21
题目:
Given a sorted array of integers, 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,-1]。题目很好理解,而且因为看到了已经排好序,所以考虑用二分搜索,这是关键,找出具体的那个数的位置,然后找到后还得看这个数的位置,如果是在开头,那么只要从后面开始找,看看有没有了;如果是在结尾,那么向前找,如果是在中间,则采用夹逼,从两头开始夹,看是否有相同的,然后再返回。思路还是很简单的,主要是二分搜索法的应用,要回熟练地写,二分搜索法的关键是,一开始要判断start <= end,这是用递归做二分搜索的关键。
public int[] searchRange(int[] nums,int target){int[] result = new int[2];result[0] = -1;result[1] = -1;int length = nums.length;if(nums == null || nums.length == 0){result[0] = -1;result[1] = -1;return result;}if(nums.length == 1 && nums[0] == target){result[0] = 0;result[1] = 0;return result;}else if(nums.length == 1 && nums[0] != target){result[0] = -1;result[1] = -1;return result;}int num = binarySearch(nums,target,0,length - 1);if(num == -1){result[0] = -1;result[1] = -1;}else{if(num == 0){int i = 0;for(i = 0; i < length; i++){if(nums[i] != nums[num])break;}result[0] = num;result[1] = i - 1;}else if(num == length - 1){int i = length - 1;while(i >= 0){if(nums[i] != nums[num])break;i--;}i++;result[0] = i;result[1] = num;}else{int i = num;int j = num;while(i <= length - 1){if(nums[i] != nums[num])break;i++;}while(j >= 0){if(nums[j] != nums[num])break;j--;}j++;i--;result[0] = j;result[1] = i;}}return result;}public int binarySearch(int[] nums,int target,int start,int end){ if(start <= end){ int mid = (start + end) / 2; if(nums[mid] == target) return mid; if(nums[mid] < target) return binarySearch(nums,target,mid + 1,end); else if(nums[mid] > target) return binarySearch(nums,target,start,mid - 1);}return -1;}
0 0
- LeetCode: Search for a Range
- LeetCode Search for a Range
- [Leetcode] Search for a Range
- LeetCode : Search for a Range
- [LeetCode] Search for a Range
- [Leetcode] Search for a Range
- Leetcode Search for a Range
- [LeetCode]Search for a Range
- LeetCode-Search for a Range
- [leetcode] Search for a Range
- LeetCode - Search for a Range
- Search for a Range leetcode
- LeetCode | Search for a Range
- LeetCode - Search for a Range
- LeetCode: Search for a Range
- leetcode: Search for a Range
- 【leetcode】Search for a Range
- Leetcode: Search for a Range
- iOS—UIScrollView简单介绍
- AVFoundation(一):基础知识
- 在未来UI设计将短信化
- android 跑马灯效果
- 搭建hbase HA集群
- LeetCode Search for a Range
- Linux下send、sendto、sendmsg函数分析
- bat实现检测fluent当前文件夹最新文件
- UIImage裁剪图片指定frame
- casperjs可以只抓取某个元素的截图
- 【C#】标签页
- 设计模式--工厂模式
- Unity3D 2D游戏开发 官方教程。(九)
- AVFoundation(二):核心AVAsset