个人记录-LeetCode 34. Search for a Range
来源:互联网 发布:淘宝图标 编辑:程序博客网 时间:2024/05/20 16:43
问题:
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、这个题目没什么难度,从复杂度来看,二分法即可。
public class Solution { public int[] searchRange(int[] nums, int target) { if (nums == null || nums.length < 1) { return new int[] {-1, -1}; } if (nums.length < 2) { if (nums[0] == target) { return new int[] {0, 0}; } else { return new int[] {-1, -1}; } } Set<Integer> result = new TreeSet<>(); searchResult(nums, 0, nums.length-1, target, result); if (result.isEmpty()) { return new int[] {-1, -1}; } else { Object[] temp = result.toArray(); return new int[] {(int)temp[0], (int)temp[temp.length-1]}; } } private void searchResult(int[] nums, int begin, int end, int target, Set<Integer> result) { if (begin > end) { return; } int middle = (begin + end) / 2; if (nums[middle] == target) { result.add(middle); } if (nums[middle] >= target) { if (nums[begin] <= target) { searchResult(nums, begin, middle - 1, target, result); } } if (nums[middle] <= target) { if (nums[end] >= target) { searchResult(nums, middle + 1, end, target, result); } } }}
2、二分法反复递归,比较耗时,改进的方法:
public class Solution { public int[] searchRange(int[] nums, int target) { if (nums == null || nums.length < 1) { return new int[] {-1, -1}; } if (nums.length < 2) { if (nums[0] == target) { return new int[] {0, 0}; } else { return new int[] {-1, -1}; } } int low = 0; int high = nums.length - 1; boolean flag = false; while (low <= high) { int middle = (low + high) / 2; if (nums[middle] == target) { flag = true; low = middle; while (low > 0 && nums[low-1] == target) { --low; } high = middle; while (high < nums.length-1 && nums[high+1] == target) { ++high; } break; } else if (nums[middle] > target){ high = middle - 1; } else { low = middle + 1; } } if (flag) { return new int[] {low, high}; } else { return new int[] {-1, -1}; } }}
0 0
- 个人记录-LeetCode 34. Search for a Range
- [LeetCode]34.Search for a Range
- LeetCode --- 34. Search for a Range
- LeetCode 34.Search for a Range
- [Leetcode] 34. Search for a Range
- [leetcode] 34.Search for a Range
- 【leetcode】34. Search for a Range
- [leetcode] 34. Search for a Range
- Leetcode 34. Search for a Range
- LeetCode 34. Search for a Range
- <LeetCode OJ> 34. Search for a Range
- 34. Search for a Range LeetCode
- [Leetcode]34.Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- LeetCode *** 34. Search for a Range
- 解决Python下pip install MySQL-python失败的问题
- Levenberg–Marquardt算法学习
- timestamps 字段按天去group by的写法
- logstash使用grok正则解析日志和kibana遇到的问题
- 操作系统(Linux)--按优先数调度算法实现处理器调度
- 个人记录-LeetCode 34. Search for a Range
- XCode8新建项目中使用swift2.3
- RapidMiner 5.3.015源代码下载并且正确的运行
- edittext在界面开始不弹出软键盘和获取焦点
- centos 7 yum 安装LAMP服务器 Apache PHP MariaDB
- 如何描述事物(对象)
- 【博弈】hdu1850 && hdu2176 (尼姆博弈)
- 使用Node.js实现一个简单的ZooKeeper客户端
- 第七届蓝桥杯B组 第二题 生日蜡烛