日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天池 在线编程 最佳利用率(二分查找 + 哈希)

發(fā)布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天池 在线编程 最佳利用率(二分查找 + 哈希) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給兩個排序的數組。
從兩個數組中各取取一個數,這兩個數之和需要小于或等于k, 需要找到兩數之和最大的索引組合。
返回一對包含兩個列表的索引。
如果有多個兩數之和相等的索引答案,你應該選擇第一個數組索引最小的索引對。
在此前提下,你應該選擇第二個數組索引最小的索引對。

1)兩數的總和<= k
2)總和是最大的
3)兩個數組索引都盡量最小

如果你無法找到答案,你應返回一個空列表[]。
You can assume that the numbers in arrays are all positive integer or zero.

示例1 輸入: A = [1, 4, 6, 9], B = [1, 2, 3, 4], K = 9 輸出: [2, 2]示例2: 輸入: A = [1, 4, 6, 8], B = [1, 2, 3, 5], K = 12 輸出: [2, 3]

https://tianchi.aliyun.com/oj/338592228998370026/357527484118536803

2. 解題

  • 遍歷 B 的元素,記錄每個值第一次出現(xiàn)的位置
  • 遍歷 A,在 B 中查找小于等于 K-A[i] 的最大的數
  • 時間復雜度 O(n1log?n2)O(n_1\log n_2)O(n1?logn2?)
class Solution { public:/*** @param A: an integer sorted array* @param B: an integer sorted array* @param K: an integer* @return: return a pair of index*/vector<int> optimalUtilization(vector<int> &A, vector<int> &B, int K) {// write your code hereif(A.empty() || B.empty() || A[0]+B[0] > K) return {};unordered_map<int,int> m;for(int i = 0; i < B.size(); ++i)if(m.find(B[i]) == m.end())m[B[i]] = i;//每個數最早出現(xiàn)的位置int i = 0, j = B.size()-1, n1 = A.size(), n2 = B.size(), sum, maxsum=INT_MIN;vector<int> ans(2);for(int i = 0; i < n1; ++i){int t = K-A[i];int l = 0, r = n2-1, pos=-1;while(l <= r) // 二分查找{int mid = l+((r-l)>>1);if(B[mid] > t)r = mid-1;else{if(mid==n2-1 || B[mid+1] > t){pos = mid;break;}elsel = mid+1;}}if(pos != -1){sum = A[i]+B[pos];if(sum > maxsum){maxsum = sum;ans[0] = i;ans[1] = m[B[pos]];}}elsebreak;}return ans;} };

50ms C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的天池 在线编程 最佳利用率(二分查找 + 哈希)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。