LeetCode 旋轉陣列查詢是否存在該數字

2021-10-10 12:54:35 字數 1168 閱讀 5054

/*前言:

目前準備每天刷一道題leetcode的題目,以此來激勵那些零基礎入門的人,千萬不要被什麼

科班和非科班的說法嚇倒了,計算機這個行業只要你肯努力,沒有什麼逾越不了的鴻溝。

只要你肯努力,乙份努力,乙份汗水,在程式設計師這個職業,你的每乙份付出都會得到對應的那

乙份匯報,尊重學習規律,循序漸進,別想著一口吃個胖子,羅馬也不是一天建成的,有朝一

日,你終會變成你想成為的人。

*//*

題目描述:

乙個原本增序的陣列被首尾相連後按某個位置斷開(比如[1,2,2,3,4,5]-[2,3,4,5,1,2]),

在第乙個和第二位斷開,我們稱其為旋轉陣列。給定乙個值,判斷這個值是否存在於這個旋轉

陣列中。

輸入是乙個陣列和乙個值,輸出是乙個布林值,表示陣列中是否存在該值。

示例1:

input:nums=[2,5,6,0,0,1,2],target=0

output:true

示例2:

input:nums=[2,5,6,0,0,1,2],target=3

output:false

解題思路:

利用二分法進行分析。即使陣列被旋轉過,但仍然可以借助陣列的遞增性。對於當前的中點,

若它指向的值小於等於最右端,則右區間是增序的。若它指向的值大於或等於最左端,則左

區間是增序的。如果目標值位於這個增序的區間內,可以對該區間進行二分查詢,否則繼續對

另一半區間繼續進行二分查詢。需要注意的是,陣列中可能存在重複的數字,假如中點和左端點

的數子相同時,並不能判斷出左右區間的有序性,需要簡單的將最左端點進行右邊移動一位,

然後繼續二分查詢。

*/

#include #include using namespace std;

class solution

bool searcharray()

if(nums[start]==nums[mid])else if(nums[mid]<=nums[end])else

}else;

int main(int argc,char* ar**);

solution solu(nums,3);

cout

}

LeetCode 旋轉陣列

將包含n 個元素的陣列向右旋轉 k 步。例如,如果 n 7 k 3,給定陣列 1,2,3,4,5,6,7 向右旋轉後的結果為 5,6,7,1,2,3,4 注意 盡可能找到更多的解決方案,這裡最少有三種不同的方法解決這個問題。要求空間複雜度為 o 1 關聯的問題 反轉字串中的單詞 ii public ...

LeetCode 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1,2,3,4,5,6,7 和 k 3輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,4...

leetcode 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1,2,3,4,5,6,7 和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,...