Leetcode--136. 只出现一次的数字
給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。
你的算法時間復雜度必須是?O(log n) 級別。
如果數組中不存在目標值,返回?[-1, -1]。
示例 1:
輸入: nums = [5,7,7,8,8,10], target = 8
輸出: [3,4]
示例?2:
輸入: nums = [5,7,7,8,8,10], target = 6
輸出: [-1,-1]
思路:二分查找
提交的代碼:
class Solution {
? ? public int[] searchRange(int[] nums, int target) {
? ? ? ? int low=0,high=nums.length-1,mid=-1,flag=1;
? ? ? ? while(low<=high)
? ? ? ? {
? ? ? ? ?? ?mid = (low+high)/2;
? ? ? ? ?? ?if(nums[mid]==target)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?flag=0;
? ? ? ? ?? ??? ?break;
? ? ? ? ?? ?}
? ? ? ? ?? ?else if(nums[mid]>target)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?high = mid-1;
? ? ? ? ?? ?}
? ? ? ? ?? ?else
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?low = mid +1;
? ? ? ? ?? ?}
? ? ? ? }
? ? ? ? int arr[] = new int[2];
? ? ? ? if(nums.length==1&&target==nums[0])
? ? ? ? {
? ? ? ? ?? ?arr[0]=0;
? ? ? ? ?? ?arr[1]=0;
? ? ? ? ?? ?return arr;
? ? ? ? }
? ? ? ? if(flag==1)
? ? ? ? {
? ? ? ? ?? ?arr[0]=-1;
? ? ? ? ?? ?arr[1]=-1;
? ? ? ? ?? ?return arr;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ?? ?arr[0] = mid;
? ? ? ? ?? ?arr[1] = mid;
? ? ? ? ?? ?for(int i=mid;i>=0;i--)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?if(nums[i]==nums[mid])
? ? ? ? ?? ??? ?{
? ? ? ? ?? ??? ??? ?arr[0] = i;
? ? ? ? ?? ??? ?}
? ? ? ? ?? ?}
? ? ? ? ?? ?for(int i=mid;i<nums.length;i++)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?if(nums[i]==nums[mid])
? ? ? ? ?? ??? ?{
? ? ? ? ?? ??? ??? ?arr[1] = i;
? ? ? ? ?? ??? ?}
? ? ? ? ?? ?}
? ? ? ? ?? ?return arr;
? ? ? ? }
? ? }
}
完整的代碼:
public class Solution34 {
public static int[] searchRange(int[] nums, int target) {
? ? ? ? int low=0,high=nums.length-1,mid=-1,flag=1;
? ? ? ? while(low<=high)
? ? ? ? {
? ? ? ? ?? ?mid = (low+high)/2;
? ? ? ? ?? ?if(nums[mid]==target)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?flag=0;
? ? ? ? ?? ??? ?break;
? ? ? ? ?? ?}
? ? ? ? ?? ?else if(nums[mid]>target)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?high = mid-1;
? ? ? ? ?? ?}
? ? ? ? ?? ?else
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?low = mid +1;
? ? ? ? ?? ?}
? ? ? ? }
? ? ? ? int arr[] = new int[2];
? ? ? ? if(nums.length==1&&target==nums[0])
? ? ? ? {
? ? ? ? ?? ?arr[0]=0;
? ? ? ? ?? ?arr[1]=0;
? ? ? ? ?? ?return arr;
? ? ? ? }
? ? ? ? if(flag==1)
? ? ? ? {
? ? ? ? ?? ?arr[0]=-1;
? ? ? ? ?? ?arr[1]=-1;
? ? ? ? ?? ?return arr;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ?? ?arr[0] = mid;
? ? ? ? ?? ?arr[1] = mid;
? ? ? ? ?? ?for(int i=mid;i>=0;i--)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?if(nums[i]==nums[mid])
? ? ? ? ?? ??? ?{
? ? ? ? ?? ??? ??? ?arr[0] = i;
? ? ? ? ?? ??? ?}
? ? ? ? ?? ?}
? ? ? ? ?? ?for(int i=mid;i<nums.length;i++)
? ? ? ? ?? ?{
? ? ? ? ?? ??? ?if(nums[i]==nums[mid])
? ? ? ? ?? ??? ?{
? ? ? ? ?? ??? ??? ?arr[1] = i;
? ? ? ? ?? ??? ?}
? ? ? ? ?? ?}
? ? ? ? ?? ?return arr;
? ? ? ? }
? ? }
public static void main(String[] args)
{
?? ?int nums[] = {5,7,7,8,8,10};
?? ?int target = 8;
?? ?int a[] = new int[2];
?? ?
?? ?a=searchRange(nums,target);
?? ?for(int i =0;i<2;i++)
?? ?{
?? ??? ?System.out.println(a[i]);
?? ?}
}
}
?
總結
以上是生活随笔為你收集整理的Leetcode--136. 只出现一次的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 域名,ip,mac地址
- 下一篇: 获取axios的return值