1. 程式人生 > >(lintcode)第14題二分查詢

(lintcode)第14題二分查詢

要求:給定一個排序的整數陣列(升序)和一個要查詢的整數target,用O(logn)的時間查詢到target第一次出現的下標(從0開始),如果target不存在於陣列中,返回-1。

樣例:在陣列 [1, 2, 3, 3, 4, 5, 10] 中二分查詢3,返回2。

思路:使用遞迴,每次都找到中間那個數進行判斷,直到區間第一個數的下標等於最後一個數的下標。判斷的時候,對中間的數進行判斷,分為3種情況,一種是剛好等於我們要找的數,這時候不能夠直接返回下標,因為我們不確定這個數的前面是否存在著同樣的數,所以,要對這個數前面的數進行查詢,找到就返回前面的,沒找到就返回中間數的下標

,當中間數小於目標數時,查詢後一半,當中間數大於目標數的時候,查詢前面一半。遞迴直到區間只有一個數。

程式碼如下:

class Solution {
    /**
     * @param nums: The integer array.
     * @param target: Target to find.
     * @return: The first position of target. Position starts from 0.
     */
    public int binarySearch(int[] nums, int target) {
        //write your code here
        return search(nums,target,0,nums.length);
    }
    public int search(int []nums,int target,int first,int last){
        if(first==last){
            if(nums[first]==target)
                return first;
            else return -1;
        }else{
            int avg=(first+last)/2;
            if(nums[avg]==target){
                if(search(nums,target,first,avg)==-1)//查詢前一半有沒有相同的數
                    return nums[avg];
                else
                    return search(nums,target,first,avg);
            }
            else if(nums[avg]>target)
                return search(nums,target,first,avg);
            else if(nums[avg]<target){
                return search(nums,target,avg+1,last);
            }
            return -1;
        }
    }
}


相關推薦

(lintcode)14二分查詢

要求:給定一個排序的整數陣列(升序)和一個要查詢的整數target,用O(logn)的時間查詢到target第一次出現的下標(從0開始),如果target不存在於陣列中,返回-1。 樣例:在陣列 [1, 2, 3, 3, 4, 5, 10] 中二分查詢3,返回2。 思路:使

C#LeetCode刷-二分查詢

二分查詢篇 # 題名 刷題 通過率 難度 4 兩個排序陣列的中位數     C#LeetCode刷題之#4-兩個排序陣列的中位

LeetCode14

編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: 輸入: ["dog","racecar","car"] 輸

OCP考試14

14. Which two statements are true regarding hot patching? (Choose two.) A. It requires relinking of the Oracle binary. B. It does not require data

演算法六記-二分查詢

為了準備春招,自己重新總結了一下二分查詢的各種形式,以及幾個二分查詢的面試題: 1.普通的二分查詢 int binary_find(int arr[], int length,int value)//普通的二分查詢 { if(!arr||length<=0) retu

CCF 201709 JSON查詢 java(100分)

自從會了正則表示式後,什麼都要用,這個題用正則反倒麻煩了。使用正則時,我卡在了多層物件的正則式上,因為百分之80的測試資料只有兩層結構,我就只得了八十分。 其實只要遍歷json的每一個字元,使用hashmap來儲存鍵和值,再加上棧來判斷當前的鍵值時屬於哪個物件就可以了。 一下程式碼得分100

譚浩強 C紅寶書 六章 14

兩個字串用gets函式讀入。輸出的正數或者負數的絕對值應是相比較的兩個字串相應字元的ASCII碼的差值。例如“A”與“C”相比,由於“A” < “C”,應該輸出負數,由於“A”與”C”的ASCII嘛差值為2,因此應該輸出“-2”。同理:“And”和“Aid”比較,根據第二個字元比較的結

C++面向物件程式設計50道程式設計14

C++面向物件程式設計50道程式設計題(第14題) 摘要:C++程式設計實習是為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛鍊學生的分析問題和解決問題的能力,提高學生運用所學知識解決實際問題的能力。   本專輯為程式設計入門者、高校計算機軟體

leecode:14:14. 最長公共字首

編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 if (strs.length < 1 || strs == null) {             return "";         }   

C#LeetCode刷-二分查詢​​​​​​​

二分查詢篇 # 題名 刷題 通過率 難度 4 C#LeetCode刷題之#4-兩個排序陣列的中位數(Median of Two Sorted Arrays)-

OCP-1Z0-051 補充5查詢和子查詢的注意事項

Which three statements are true regarding sub queries? (Choose three.)A. Multiple columns or expressions can be compared between the main query and sub que

(lintcode)29交叉字串

比如 s1 = "aabcc" s2 = "dbbca"     - 當 s3 = "aadbbcbcac",返回  true.     - 當 s3 = "aadbbbaccc", 返回 false. 思路:這道題一開始我是使用三個下標分別對應3個字串,如果匹配上,那麼就會往後移一位,但是這樣就會有一個嚴

計蒜客 挑戰難題 14:羅馬數字轉換成整數

給定一個羅馬數字s,( I<=s<=MMMCMXCIX)(即1到3999),將羅馬數字轉換成整數。 如羅馬數字I,II,III,IV,V分別代表數字1, 2, 3, 4, 5。 格式:    第一行輸入一個羅馬數字,接下來輸出對應的整數。 提示:    首先要來了解一下羅馬數字表示法,基本字元

OCP-1Z0-051 補充43查詢

Evaluate the following query:      What would be the outcome of executing the above SQL statement? A. It produces an errorB. It shows the names of products

劍指offer:14輸入一組數,奇數前偶數後

package cn.itcast.pro_6; /*輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序, * 使得所有的奇數位於陣列的前半部分,所有的偶數位於位於陣列的後半部分, * 並保證奇數和奇數,偶數和偶數之間的相對位置不變。 */ impor

leetcode刷 二分查詢

作為本科非科班出身的CSer也經歷了看到leetcode不知從何刷起的感覺,現在準備重新刷一下leetcode,寫部落格主要是記錄下自己的思路,儘量保持每天兩道,這篇主要總結二分查詢所遇到的問題以及變種。 打個廣告微博 @辣醬一直就這樣  歡迎同學私信討論 先說一下二分查

LeetCode14 最長公共前綴

mon efi char 字符串 不存在 bool 第一個 for pan /*編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴,返回空字符串 ""。 ["flower","flow","flight"] */ 思路1:時間復雜度為O(n*m),遍歷

LeetCode14 最長公共字首

/*編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 ["flower","flow","flight"] */ 思路1:時間複雜度為O(n*m),遍歷陣列 ,相同元素放入Stringbuilder中.   1 class Solution14 { 2

OCP-1Z0-051 149查詢中ALL的應用

View the Exhibits and examine the structures of the COSTS and PROMOTIONS tables. Evaluate the following SQL statement:SQL>SELECT prod_id       FROM cost

(lintcode)17 子集

要求:給定一個含不同整數的集合,返回其所有的子集 注意事項:子集中的元素排列必須是非降序的,解集必須不包含重複的子集。 樣例 如果 S = [1,2,3],有如下的解: [ [3], [1], [2], [1,2,3], [1,3], [2,3],