給定乙個有序陣列和乙個目標值,找出該目標值在這個陣列裡面的區域,若目標不存在於陣列中,返回[-1, -1];
例如:有序陣列 1 2 3 4 5 6 6 6 6 給出目標值6,應當返回[5, 8] ;
要求:時間複雜度o(llogn)。
看到有序陣列和時間複雜度o(logn)時,第一反應就是二分查詢。
1.先二分查詢出第乙個與目標值相等的位置;
2.在(1)的基礎上向左邊搜尋得出區域的左邊範圍,同樣是二分法;
3.在(1)的基礎上向右邊搜尋得出區域的右邊範圍。
#include using namespace std;
// o(logn)
// 引數:arr有序陣列,ans計算值,target目標,length陣列長度
void targetrange(int* arr, int* ans, int target, int length)
if(arr[pix] < target)else
pix = (start + end) / 2;
} ans[0] = ans[1] = pix;
// 計算左邊的範圍
int end1 = pix - 1;
pix = (start + end1) / 2;
if(end > start)else
if( start >= end1)
break;
pix = (start + end1) / 2;
} }// 計算右邊值
int start1 = pix + 1;
pix = (start1 + end) / 2;
if(end > start)else
if(start1 >= end)
break;
pix = (start1 + end) / 2;
} }}int a[100];
int main()
return 0;
}
2016校園招聘筆試程式設計題 1
include stdafx.h include include include using namespace std typedef struct studentscorestu 單科成績 總成績檢查 void check stu stuary,char s,int ilen else if i...
騰訊2016秋招筆試程式設計題
有乙個由很多木棒構成的集合,每個木棒有對應的長度,請問能否用集合中的這些木棒以某個順序首尾相連構成乙個面積大於 0 的簡單多邊形且所有木棒都要用上,簡單多邊形即不會自交的多邊形。初始集合是空的,有兩種操作,要麼給集合新增乙個長度為 l 的木棒,要麼刪去集合中已經有的某個木棒。每次操作結束後你都需要告...
2016網易筆試程式設計題
有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?每個輸入包含 1 個測試用例。每個測試資料的第一行包含乙個整數 n 1 n 50 表示學生的個數,接下...