携程笔试题:订单查询
生活随笔
收集整理的這篇文章主要介紹了
携程笔试题:订单查询
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
攜程筆試題:有一批訂單記錄,數(shù)據(jù)有訂單號(hào),入店時(shí)間,離店時(shí)間;輸入一個(gè)時(shí)間值A(chǔ),需要在這批記錄中找到符合入離店時(shí)間范圍(A大于等于入店時(shí)間,并且A小于等于離店時(shí)間)內(nèi)的所有記錄。單次查詢時(shí)間復(fù)雜度控制在0(logN)
※注意:訂單號(hào)升序輸出
測(cè)試用例:
輸入:
typedef struct TYPES {int id;long t1, t2; }TYPES; int bsearch( vector<TYPES > arr, ?int len, ?int data) {int l = 0;int r = len - 1;int mid = 0;while (l <= r){mid = l + (r - l) / 2;if (arr[mid].t1 > data&&arr[mid].t1 > data)r = mid - 1;else if (arr[mid].t1 < data&&arr[mid].t2 < data)l = mid + 1;elsereturn mid;}return -1; } /* int main() {int num = 0;long data;vector<TYPES > res;vector<long > dd;cin >> num;cin >> data;for (int i = 0; i < num; i++){TYPES re;cin >> re.id;cin >> re.t1;cin >> re.t2;res.push_back(re);}int tem= bsearch(res, num, data);if (tem == -1){cout << "null";return 0;}else{int left = tem;int right = tem+1;while(left>-1){if (res[left].t1 < data&&res[left].t2 > data)dd.push_back(res[left].id);left--;}for (int i = dd.size() - 1; i > -1; i--)cout << dd[i] << endl;while (right<res.size()){if (res[right].t1 < data&&res[right].t2 > data)cout << res[right].id << endl;left++;}}return 0; }10
20180602
1001?20180103?20180105
1002?20180202?20180203
1003?20180304?20180306
1004?20180401?20180408
1005?20180501?20180504
1006?20180601?20180604
1007?20180705?20180706
1008?20180801?20180804
1009?20180903?20180903
1010?20181003?20181003
輸出:
1006
輸入:
5
20170103
1013?20180103?20180105
1022?20180102?20180103
1103?20180104?20180106
1034?20180101?20180102
1105?20180201?20180204
輸出:
null
總結(jié)
以上是生活随笔為你收集整理的携程笔试题:订单查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux挂载exfat移动硬盘
- 下一篇: 【福利】OpenCV最新中文版官方教程来