一. 習題與分析
題目:已知集合s,和乙個整數x,求集合s中任意兩個元素和值等於x的元素組合。演算法要求時間複雜度為o(n*log(n))
分析:1)組合情況總共有n*(n-1)/2,若是一一測試,時間複雜度不夠。
2)可以先進行排序,符合這個時間複雜度的排序,然後確定乙個元素,通過二分法查詢另一元素存在情況。二分法時間複雜度為log(n)肯定符合要求。
二. **實現
1、調整日誌類,可以鏈式呼叫
template
class loginfo
;//輸出狀態資訊
loginfo* showstate(string strinfo, int nnum, string strother);
loginfo* showstate(string strinfo, int nnum);
loginfo* showstate(string strinfo);
loginfo* showstate(datatype key);
loginfo* showline();
//展示陣列內容
loginfo* showarray(datatype parray, int nsize)
cout
<< endl;
return
this;
};};
2、二分法查詢實現
//二分查詢,返回元素位置,多個元素返回最小的下標
int binarysearchmin(t testarray, int nsize, int nbegin, t key)
else
}return nmid;
}else
if (testarray[nmid] < key)
else
if (testarray[nmid]>key)
nmid = nstart + (nend - nstart) / 2;//防止資料溢位,學習到了
}return -1;
}
3、問題解決
//給定元素集合,與乙個數,求這個集合任意兩個元素和等於該元素的集合。演算法複雜度o(nlog(n))
void serchtwoelementplusequalone(t testarray, int nsize, t sum)
else}}
}log.showstate("一共查詢到:", ncount, " 組組合")->showline();
}
4、測試**
#include
#include
#include"codetest.h"
#define n_max 9
int main()
5、結果輸出
三. 經驗總結
1、return this 返回指標型別,不是物件。
2、指標呼叫函式不能用.應該用->
四. 後續計畫
進行演算法導論的練習,暫時不進行c++基礎練習。多個目標導致自己有點混亂,目標不明確。暫時就這樣吧。
js 根據值來查詢所在陣列的位置(索引值)
一 indexof 方法可返回某個指定的字串值在字串中首次出現的位置。indexof 方法可返回陣列中某個指定的元素位置。該方法將從頭到尾地檢索陣列,看它是否含有對應的元素。開始檢索的位置在陣列 start 處或陣列的開頭 沒有指定 start 引數時 如果找到乙個 item,則返回 item 的第...
JS中根據指定值刪除陣列中的元素
原生js 如果想刪除陣列,有乙個函式 splice 刪除元素,並向陣列新增新元素。splice是根據陣列內的下標 也就是索引來 刪除元素的比如 var arry a b c d arry.splice 2,1 alert arry 下標為 2 也就是 c 給刪除了。那麼現在我們在很多場景中,需要用到...
跟提供的值獲取在對應陣列中的下標 根據值獲取下標
根據值獲取在陣列中對應的下標 getarrayindex arr any,obj any return i 這裡的 any是ts 規則可以省去 arr 對應的陣列 obj 對應的具體值 例子 getarrayindex arr any,obj any return i mounted 獲取到e在ar...