劍指offer一刷 查詢演算法

2022-10-10 17:33:08 字數 1193 閱讀 6809

難度:簡單

class solution 

return -1;}}

時間複雜度:o(n),空間複雜度:o(n)。

遍歷陣列並通過交換操作,使元素的索引一一對應(即 nums[i] = i

)遍歷中,第一次遇到數字 x 時,將其交換至索引 x 處;而當第二次遇到數字 x 時,一定有 nums[x] = x,此時即可得到一組重複數字。

class solution 

if(nums[nums[i]] == nums[i]) return nums[i];

int tmp = nums[i];

nums[i] = nums[tmp];

nums[tmp] = tmp;

}return -1;}}

時間複雜度:o(n),空間複雜度:o(1)。

使用二分法分別找到左邊界 left右邊界 right,易得數字 target 的數量為right - left - 1

class solution 

int right = i;

// 若陣列中無 target ,則提前返回

if(j >= 0 && nums[j] != target) return 0;

// 搜尋左邊界 right

i = 0; j = nums.length - 1;

while(i <= j)

int left = j;

return right - left - 1;}}

時間複雜度:o(logn),空間複雜度:o(1)。

排序陣列中的搜尋問題,首先想到二分法解決。根據題意,陣列可以按照以下規則劃分為兩部分。

缺失的數字等於「右子陣列的首位元素」對應的索引;因此考慮使用二分法查詢 「右子陣列的首位元素」 。

class solution 

return i;}}

時間複雜度:o(logn),空間複雜度:o(1)。

每日一刷 劍指offer 一 二維陣列中的查詢

為提公升coding能力,開啟每日一刷,每天至少完成1道題目,並將自己的總結思考記錄於此。題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。嘗試解法 暴力...

劍指offer每日一刷 2023年11月20日

題目名稱 矩形覆蓋 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?從題目描述可知,這也是一道斐波那契數列的題目 f n f n 1 f n 2 題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個...

劍指offer每日一刷 2023年11月24日

題目 鍊錶中倒數第k個接點 題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。鍊錶的定義 public class listnode 方法一 建立兩個指標pre和last,先讓兩者均指向頭結點,然後讓pre指標走k 1步,指向第k個節點,這樣pre和last就相差k 1個結點,last就指向pre...