(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-兩個排序陣列的中位
LeetCode第14題
編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 示例 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,寫部落格主要是記錄下自己的思路,儘量保持每天兩道,這篇主要總結二分查詢所遇到的問題以及變種。 打個廣告微博 @辣醬一直就這樣 歡迎同學私信討論 先說一下二分查
LeetCode第14題 最長公共前綴
mon efi char 字符串 不存在 bool 第一個 for pan /*編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴,返回空字符串 ""。 ["flower","flow","flight"] */ 思路1:時間復雜度為O(n*m),遍歷
LeetCode第14題 最長公共字首
/*編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 ["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],