1. 题目

某交友网站会给除了第一个用户以外的每个新注册的用户推荐一位之前已经注册过并且性格值和他最相近的用户,如果有多人满足条件则选择性格值较小的。

给定数组val[]表示按时间顺序注册的 n 位用户的性格值,输出一个大小为 n-1 的数组,表示系统给这些人推荐的用户的性格值。

样例 1:
输入: val=[8,9,7,3,0,5,11]
输出: [8,8,7,3,3,9]
解释:
令 ans = []
第 2 个数为 9,前面只有第 1 个数 8,此时 ans = [8]
第 3 个数为 7,前面的数有 8, 9,与 7 性格值最小的为 8,此时 ans = [8, 8]
第 4 个数为 3,前面的数有 8, 9, 7,与  3 性格值最小的为 7,此时 ans = [8, 8, 7]
第 5 个数为 0,前面的数有 8, 9, 7, 3,与  0 性格值最小的为 3,此时 ans = [8, 8, 7, 3]
第 6 个数为 5,前面的数有 8, 9, 7, 3, 0,与  5 性格值最小的为 3,此时 ans = [8, 8, 7, 3, 3]
第 7 个数为 11,前面的数有 8, 9, 7, 3, 0, 5,与  11 性格值最小的为  9,此时 ans = [8, 8, 7, 3, 3, 9]样例 2:
输入: val=[465, 5464, 6467, 6466779, 6461, 56]
输出: [465,5464,6467,6467,465]
解释:
令 ans = []
第 2 个数为 5464,前面只有第 1 个数 465,此时 ans = [465]
第 3 个数为 6467,前面的数有 465, 5464,与 6467 性格值最小的为 5464,此时 ans = [465, 5464]
第 4 个数为 6466779,前面的数有 465, 5464, 6467,与  6466779 性格值最小的为 6467,此时 ans = [465, 5464, 6467]
第 5 个数为 6461,前面的数有 465, 5464, 6467, 6466779,与  6461 性格值最小的为 6467,此时 ans = [465, 5464, 6467, 6467]
第 6 个数为 56,前面的数有 465, 5464, 6467, 6466779, 6461,与  56 性格值最小的为 465,此时 ans =[465, 5464, 6467, 6467, 465]注意事项
2<=n<=100000
0<=val<=1000000

类似题目:LeetCode 315. 计算右侧小于当前元素的个数(二叉查找树&二分查找&归并排序逆序数总结)

2. 解题

  • 给一个空数组,依次把性格值二分插入到其中
  • 检查插入位置前后跟我 绝对值较小 的取为答案
  • 变形版 二分查找请参考
class Solution {int l,r,mid;
public:vector<int> getAns(vector<int> &val) {if(val.size() <= 1)return {};vector<int> t;//二分插入数组t.push_back(val[0]);vector<int> ans(val.size()-1);int i, idx, k = 0, f, b;for(i = 1; i < val.size(); i++,k++){idx = bs(t,val[i]);//插入位置t.insert(t.begin()+idx+1,val[i]);//插入数组f = (idx >= 0 ? t[idx] : -10000000);//前面的性格值b = (idx+2 < t.size() ? t[idx+2] : -10000000);//后面的性格值if(abs(f-val[i]) <= abs(b-val[i]))ans[k] = t[idx];//取较小的elseans[k] = t[idx+2];}return ans;}int bs(vector<int> & a, int& target){    //二分查找,性格值小于等我的 最后一个l = 0, r = a.size()-1;while(l <= r){mid = l+((r-l)>>1);if(a[mid] > target)r = mid-1;else //(a[mid] <= target){if(mid==a.size()-1 || a[mid+1] > target)return mid;elsel = mid+1;}}return -1;}
};

100% 数据通过测试
总耗时 653 ms
您的提交打败了 35.48% 的提交!

LintCode 1690. 朋友推荐(二分插入)相关推荐

  1. python编程入门书籍推荐-给刚入门python的朋友推荐几本书

    给刚入门python的朋友推荐几本书 1.python编程 从入门到实践 本书是一本针对所有层次的Python读者而作的Python入门书.全书分两部分:首部分介绍用Python 编程所必须了解的基本 ...

  2. 给不会打字的朋友推荐一种鼠标写字的输入法

    给不会打字的朋友推荐一种鼠标写字的输入法 2011年05月29日 软件名称:逍遥笔 软件版本:6.5 软件授权:免费软件 使用平台:NT/2000/XP/2003/Vista 插件情况:无插件 公司网 ...

  3. 给有兴趣、有责任要讲课、分享的朋友推荐两本书

    赖勇浩(http://laiyonghao.com) 从 2009 年 8 月开始组织珠三角技术沙龙,到现在已经快满四年了. 在组织技术沙龙之前,也曾在公司.Q群聚会上分享技术讲演. 到现在,算是一个 ...

  4. 扫地机器人石头爬坡_为什么要给朋友推荐石头扫地机器人?石头 T6扫地机器人测评体验...

    日常作为值得买郑州分剁剁主,经常会在群里见到扫地机器人买什么?石头扫地机器人怎么样?这样类的问题.毕竟都是值得买用户,对于买什么一般都会有类似那款性价比更高更好用的疑问.自己也用过几台扫地机器人了,像 ...

  5. 强烈向喜欢玩魔兽TD的朋友推荐这个小游戏(附下载)

    最近被这个名为"xeno tactic"的Flash小游戏完全迷住了.不到1M的小游戏竟然可以做成这样.趣味性和智慧型完全不亚于,甚至说超过那些魔兽争霸TD地图.不仅仅要合理的升级 ...

  6. python好学吗 老程序员-想自学程序员,朋友推荐了python,靠谱吗?

    回答这个问题核心的一点是题主的目标."想自学程序员",因此目标是就业对吧,而不是自己使用.如果是这样的话,并不推荐Python给你,原因我下面分析. 如果是想入行做软件开发工作,那 ...

  7. 上海朋友推荐科科过PMP备考三点心得

    2021年1月,在与公司同事闲聊中得知其正在备考PMP,从证书的含金量.目前行业的认可度以及自我提升等方面考虑,我毅然加入了2021年4月的考试大军(后因疫情关系,延期至6月考试).起初想着自己在网上 ...

  8. 朋友推荐了一款刷题神器

    做了一款编程面试题小程序,本小程序旨在帮助大家面试刷题使用,小程序中的面试题,大部分来源于编程群内广大程序员朋友上传的真实面试题,答案并经由自己及参考一些资料整理得来,如果使用中遇到问题,请及时反馈. ...

  9. 给朋友推荐一些歌,也算是简单的整理一下自己机器里的MP3

    羽泉<HAS IT>  发布在新专辑< 三十>里的.节奏明快,内容凸现特有的性格. 许巍<完美生活>  老歌了,但是如果你觉得你的身体中有着青春和理想在不断碰撞,那 ...

最新文章

  1. 目标检测计算mAP,AP,Recall,Precision的计算方式和代码(YOLO和FastRCNN等)
  2. 李宏毅深度学习——第一天(Bias and Variance)
  3. Scrum 项目1.0 2.0 3.0 4.0 5.0 6.0 7.0
  4. myeclispe快捷键一\(≧▽≦)/终于也收藏了
  5. c# 获取当前活动窗口句柄,获取窗口大小及位置
  6. mysql线程缓存和表缓存
  7. 蓝牙连接不上车要hfp_汽车上hfp是什么意思
  8. pytorch中上采样的实现
  9. 【目标检测】单阶段算法--YOLOv1详解
  10. Pytorch:优化器
  11. Python入门学习笔记(1)
  12. Chrome格式化json
  13. cocos2d-x 10.1版本 修复真机上白屏问题
  14. IO File.copy 实现文件的复制
  15. Asp.net can do Native Code also can do it(updated)
  16. oj 小黑华丽的逆袭机会
  17. MSDTC不可用解决办法
  18. html背景颜色渐变代码
  19. 常州abb机器人编程_最新ABB机器人编程程序解析
  20. 罗升阳:那两年炼就的Android内功修养(转载老罗的)

热门文章

  1. Qt DLL总结-创建及调用QT的 DLL
  2. 怎么用计算机画正弦函数图像,几何画板如何绘制正弦函数图象
  3. sc.next在java什么意思_sc.next() 和 nextLine 的原理
  4. 模板vs定制 门店小程序该如何选择?
  5. JavaScript 对象和包装类
  6. 2017 实习面试问题总结(阿里、头条、美团、cvte、乐视、华为)
  7. 前端模块化(二):模块化编程
  8. 在mybatis中resultMap与resultType的区别
  9. date format 精辟讲解
  10. 最详细的U-BOOT源码分析及移植