面試題53 在排序陣列中查詢數字

2021-09-22 21:10:39 字數 1418 閱讀 4252

題目一:統計乙個數字在排序陣列**現的次數。

解法一:

利用c++ stl的二分查詢

class solution

};

int getnumberofk(vectordata, int k)
解法二:

看見有序,肯定就是二分查詢了,演算法比較簡單,不多說,值得一提的是,不要拘泥於遞迴,要會迴圈寫法。

//暴力匹配,時間複雜度o(n)

//觀察陣列本身的特性可以發現,

//排序陣列這樣做沒有充分利用陣列的特性,

//可以使用二分查詢,找出資料,然後進行左右進行統計

//具體演算法設計:二分查詢找到k的所在位置

// 在原陣列裡面分別左右對k的出現次數進行統計

class solution

return -1;

} int getnumberofk(vectordata, int k)

while (n < len && data[n] == k)

return sum;

}};

以下兩題均是基於二分查詢法:

題目二:0 ~ n-1 中缺失的數字

乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1範圍內的n個數字中有且只有乙個數字不在該陣列中,請找出該數字。

//如果中間元素的值和下標相等,那麼下一輪查詢只需要查詢右半邊;

//如果中間元素的值和下標不相等,並且它前面乙個元素和它的下標相等,這意味著

//這個中間的數字正好是第乙個值和下標不相等的元素,它的下標就是陣列中不存在

//的數字;

//如果中間元素的值和下標不相等,並且它前面乙個元素和它的下標不相等,這意味著

//下一輪查詢我們只需要在左半邊查詢即可

int getmissingnumber(vectornumbers, int length)

else

left = middle + 1;

} if (left == length)

return length;

}

題目三:陣列中數值和下標相等的元素。

假設乙個單調遞增的陣列裡邊的每個元素都是整數並且是唯一的。請實現乙個函式,找出陣列中任意乙個數值等於其下標的元素。例如在陣列中,數字3和它的下標相等。

思路:如果第i個數字的值大於i,那麼它右邊的數字都大於對應的下標;如果第i個數字的值小於i,那麼它左邊的所有數字的值都小於對應的下標

int getnumbersameasindex(vectornumbers, int length)

return -1;

}

面試題53 在排序陣列中查詢數字

統計乙個數字在排序陣列中出現的次數,例如,輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4.思路 既然輸入的陣列是排序的,那麼我們自然能想到用二分查詢演算法,如何高效的利用二分查詢,可以分別利用二分查詢找到第乙個k和最後乙個k。class solution return number ...

面試題53 在排序陣列中查詢數字

統計乙個數字在排序陣列 現的次數。考察點 二分查詢的應用 知識遷移能力。思路 可以直接想到時間複雜度為o n 的從前到後的遍歷方法。這裡採用二分查詢法,找到特定出現的k,如果中間的數字比k 大,那麼第一次出現的k 只能出現在前半段,如果中間的數字比k小,那麼第一次出現k的位置只能在後半段,如果相等的...

面試題53 I 在排序陣列中查詢數字 I

題目描述 統計乙個數字在排序陣列 現的次數。示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 2 示例 2 輸入 nums 5,7,7,8,8,10 target 6 輸出 0 限制 0 陣列長度 50000 解法一 因為引數是整形,可以用二分查詢k 0.5 k 0.5 兩...