日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--136. 只出现一次的数字

發布時間:2024/7/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 只出现一次的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。