天池 在线编程 最佳利用率(二分查找 + 哈希)
文章目录
- 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 的元素,记录每个值第一次出现的位置
- 遍历 A,在 B 中查找小于等于
K-A[i]
的最大的数 - 时间复杂度 O(n1logn2)O(n_1\log n_2)O(n1logn2)
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;//每个数最早出现的位置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阿明),一起加油、一起学习进步!
天池 在线编程 最佳利用率(二分查找 + 哈希)相关推荐
- 天池 在线编程 木材加工(二分查找)
文章目录 1. 题目 2. 解题 1. 题目 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k. 当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头 ...
- 【组队学习】【34期】阿里云天池在线编程训练营
阿里云天池在线编程训练营 航路开辟者:陈信达.杨世超.赵子一.马燕鹏 领航员:武帅.初晓宇.叶前坤.邱广坤.朱松青 航海士:宁彦吉.肖桐.汪超.陈信达.杨世超.赵子一.武帅.初晓宇.叶前坤.邱广坤.朱 ...
- 1.9 编程基础之二分查找 12 最长平台 python
http://noi.openjudge.cn/ch0109/12/ """1.9 编程基础之二分查找 12 最长平台 http://noi.openjudge.cn/c ...
- 1.9 编程基础之二分查找 13:整数去重 python
http://noi.openjudge.cn/ch0109/13/ """1.9 编程基础之二分查找 13:整数去重 http://noi.openjudge.cn/c ...
- 1.11 编程基础之二分查找 08 不重复地输出数 python
http://noi.openjudge.cn/ch0111/08/ """ 1.11 编程基础之二分查找 08 不重复地输出数 http://noi.openjudge ...
- 【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现相关面试题介绍
最近开始复习基础找工作,二分查找算是最基本而且十分重要的算法了,现在完整的解析一下,作为后面复习只用.内容分为几个部分: 一.二分查找的基本过程 折半查找技术,又称为二分查找.它的前提条件是线性表中的 ...
- 天池 在线编程 求和查找
文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/164427478262600292/204998627646706400 2. 解题 ...
- 天池 在线编程 订单分配(回溯)
文章目录 1. 题目 2. 解题 1. 题目 描述 打车派单场景, 假定有N个订单,待分配给N个司机. 每个订单在匹配司机前,会对候选司机进行打分,打分的结果保存在N*N的矩阵score,其中scor ...
- 天池 在线编程 双向取数(博弈DP)
文章目录 1. 题目 2. 解题 1. 题目 https://tianchi.aliyun.com/oj/245679029019779851/254275128279634585 有一个长度为n的数 ...
最新文章
- Three.js 入门示例
- eWebEditor不支持IE8的解决方法
- 快速排序 java导包_排序算法-快速排序(Java实现)
- Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
- java csv 双引号_Java-使用Scess编写CSV时从字符串类型数据中删除双引号
- With语句是什么?
- C++并发与多线程(二) 创建多个线程、数据共享问题分析、案例代码
- JMETER安装与配置教程
- 配置cfree 5 支持C++11
- java 时间换算_时间换算java实现
- Ubuntu下安装小企鹅fcitx输入法
- 什么是V2X?如何通过V2X技术实现5G智慧交通?
- python相关性分析模型,相关性分析原理及Python实战
- 基于python的文件加密传输_python 利用Crypto进行AES解密加密文件
- C语言变量常量,基本数据类型及数据类型转换详讲
- 关系型数据库与非关系型数据库的简介、对比和说明!!!
- 使用Qt获取系统版本
- 什么是缺陷密度?计算的公式及示例
- Bayesian Face Revisited: A Joint Formulation论文笔记
- 简单聊聊分布式系统架构
热门文章
- python3.7知识点汇总
- python金字塔_高斯金字塔与拉普拉斯金字塔的原理与python构建
- 数组拼接时中间怎么加入空格_【题解二维数组】1123:图像相似度
- qlabel可以选中吗_惊现凡尔赛式排版!原来微信公众号排版样式还可以“变装”?...
- 计算机在超声的应用,计算机在医学超声成像中应用.pdf
- Linux字符设备驱动剖析
- linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能
- java与.net平台之间进行RSA加密验证
- zbb20180117 汉字转拼音 pinyin4
- [转]微信小程序登录逻辑梳理