1. 程式人生 > >給定一個經過一次旋轉的有序陣列,從中查詢一個值,若存在返回它的索引,不存在返回-1,假定陣列存在重複元素

給定一個經過一次旋轉的有序陣列,從中查詢一個值,若存在返回它的索引,不存在返回-1,假定陣列存在重複元素

/**********************************************************************************************
**description:給定一個經過一次旋轉的有序陣列,從中查詢一個值,若存在返回它的索引,不存在返回-1
**            假定陣列存在重複元素
**********************************************************************************************/

#include<iostream>
#include<vector>
using namespace std;

//陣列存在重複重複元素,a[low] <= a[mid]條件成立也不能判斷是升序的
//只有a[low] < a[mid]是嚴格升序,a[low] == a[mid]確定不了,就low++
//時間複雜度O(logn),空間複雜度O(1)
int searchRotateRepeat(const vector<int> &arr, int target)
{
    int low = 0;
    int high = arr.size() - 1;
    while (low <= high)
    {
        int mid = (low + high) / 2;
        if (target == arr[mid])
            return mid;
        if (arr[mid] > arr[low])
        {
            if (target >= arr[low] && target < arr[mid])
                high = mid - 1;
            else
                low = mid + 1;
        }
        else if (arr[mid] < arr[low])
        {
            if (target <= arr[high] && target > arr[mid])
                low = mid + 1;
            else
                high = mid - 1;
        }
        else
            low ++;
    }
    return -1;
}

相關推薦

給定一個經過旋轉有序陣列從中查詢一個存在返回索引存在返回-1,假定陣列存在重複元素

/********************************************************************************************** **description:給定一個經過一次旋轉的有序陣列,從中查詢一個值,若存在

hdu4183往返經過至多每一個/最大流

namespace == != hdu scanf push i++ r+ tdi 題意:從s到t,每一個點有f值,僅僅能從f值小的到大的。到T後回來。僅僅能從f值大的到 小的,求可行否。 往返,事實上就是倆條路過去(每一個點最多一次)。所以想到流量為2,跑最大流。看是

找出一個int陣列中僅出現過的數字(前提:只有一個這樣的數)

如: int[] num = new int[8] { -105, 2, 3, 2, -105, 3, 4, 3 }    

資料結構面試題總結5——陣列:找出陣列中唯一一個出現元素

問題描述:一個數組其中有一個元素出現了一次(奇次),其他元素都出現兩次(偶數次數),找出出現一次(奇次)的元素。 分析:碰到這種偶次奇次的問題,首先要想一下位運算中的異或。一個數異或本身為0,一個數異或0不變。a ^ a = 0, a ^ 0 = a。 這個題中,我們可以把

完整的HTTP事務是怎樣一個過程?

-h archive sts ipv 信息 headers document 響應頭 讀取 當我們在瀏覽器的地址欄輸入 www.linux178.com ,然後回車,回車這一瞬間到看到頁面到底發生了什麽呢? 以下過程僅是個人理解: 域名解析 --> 發起TCP

掛馬清除經歷:處理一個利用thinkphp5遠端程式碼執行漏洞挖礦的木馬

昨天發現 一臺伺服器突然慢了 top 顯示 幾個程序100%以上的cpu使用 執行命令為 : /tmp/php  -s /tmp/p2.conf 基本可以確定是被掛馬了 下一步確定來源  last 沒有登陸記錄 先幹掉這幾個程序,但是幾分鐘之後又出

完整的HTTP事務是怎樣一個過程

宣告:本文章中的說法僅是個人理解總結,不一定完全正確,但是可以有助於理解。 關於HTTP協議可以參考以下: HTTP協議漫談 http://kb.cnblogs.com/page/140611/ HTTP協議概覽 http://www.cnblogs.com/vamei/archive/2013/05

Linux命令基礎34-如何在一個終端執行多個命令

首先,你是否考慮過,在輸入多個命令後,敲擊回車,希望這多個命令都被執行。其實linux是允許這樣做的。 1. 採用分號(;)分隔多個命令 2. 採用兩個連線符(&&) 3.如果命

一個關聯兩張表 desc降序 asc升序

public function wocaotuijian(){ $list=Db::table('xc_tuijiansum')->alias('a') ->join('xc_member me','a.ui

圖片的每點選旋轉90度, filter和css3屬性

<!DOCTYPE html> <html>     <head>         <title> ImageRotation </title>         <meta http-equiv="Conte

使用mybatis進行like 模糊查詢遇到的問題

bat 通過 模糊查詢 date 但是 AR 通配符 問題 解決辦法 "bdate like ‘#{date}%‘ and ..." 最開始這樣寫的· 將傳入的參數和%用單引號包起來,但是這會報錯 java.sql.SQLException: Parameter in

快速改寫 SQL Server 高效查詢的範例

高效 server inner ID ble 測試 tle blog isp 最近線上系統突然出現匯出資料超過 10 筆時,查詢逾時的狀況,在仔細查找之後。 發現了問題原因,透過應用端與數據端兩邊同時調整,將查詢的效率提昇了約數百倍以上 首先,原本應用端的商務邏輯為每一分頁

經典筆試題練習之陣列查詢1)第一個重複元素

《劍指OFFER名題精講2版》P39 題目侷限性: 輸入陣列的長度0-200,陣列內每個元素都在0-200之間。 解決思路: 使陣列的值與陣列下標一一對應。 書中原始碼: #include<stdio.h> #include<stdlib.h

js陣列操作find查詢特定結合es6特性

使用場景 假如我們給vue元件綁定了一個班級的學生列表資料。其資料結構可能如下格式,如果你想從以下資料中查找出姓名為李四的學生的資訊。 var stu = [ { name: '張三', gender: '男',

Linux怎麼快速查詢檔案怎麼查詢一個命令檔案所在路徑、以及根據檔案內容進行查詢

引言:上期回顧(想要學習的童鞋可以點選看看) 上一章節講訴了使用find命令查詢檔案的幾種方式,如果伺服器使用久了,或者是說部署了很多服務,在這種情況下使用find搜尋檔案會出現特別慢,同時也會消耗很多資源。所以針對這個問題,今天我們來學習另外一個能快速查詢一個檔案的命令,

資料庫查詢語句oracle查詢一個表中欄位相同資訊的個數並按個數排序

表名:hotsearch    欄位:hotword select distinct hotword, count(hotword) from hotsearch group by hotword order by count(hotword) desc;

給定一個有序陣列刪除重複內容使每個元素只出現

例:給定nums = [1,1,2], 你的函式應該返回length = 2,前兩個nums元素分別是1和2。 無論你離開新的長度,都沒有關係。 這道題的思路就是採用兩個標記點 number 和 i ,number記錄不重複元素的位置,i從number的下一個開始遍歷陣列,如果i位置的數字等於number位

整型陣列中只有一個或兩個數出現其它的數都出現偶數

Question: 一個整型數組裡只有一個或兩個數字之外,其他的數字都出現了偶數次。求這個或這兩個只出現一次的數字 解: 題中關鍵資訊為其它數字出現偶數次,想到異或運算的性質知一個數與自身偶數次異或結果為0,可知如果將陣列中所有的數字進行異或,則結果等於這兩個只出現一次的數字的異或

CF E. Vasya and a Tree】 dfs+樹狀陣列(給你棵n個節點的樹每個點有一個值,初始全為0m操作每次三個數(v, d, x)表示只考慮以v為根的子樹將所有與v點距離小於等於d的點權全部加上x求所有操作完畢後所有節點的

題意: 給你一棵n個節點的樹,每個點有一個權值,初始全為0,m次操作,每次三個數(v, d, x)表示只考慮以v為根的子樹,將所有與v點距離小於等於d的點權值全部加上x,求所有操作完畢後,所有節點的值   首先要明確兩件事情性質1.每個人的操作只會影響到他的子孫(包括自己) 性質1.每個人的操

給定一個字串刪除字串中所有的b和ac組合 要求:字串只遍歷能使用額外的空間

string = 'aaascsscc' ls = list(string) def isA(ls): i = 0 while i < len(ls): if ls[i] == 'b': ls.pop(i) if i &g