题目描述:

给定一个整数数组,要求找到最小的差的绝对值。

思路:

(1)暴力,O(n^2)

(2)O(n*logn),排序+寻找相邻最小的差值的绝对值,实现在下面的fun_1

(3)O(n*logn),分治,最小差值要么在左边要么在右边,或者一个在左边一个在右边,那么第三种情况就分别遍历左右,找到两边最大值和最小值,

最小值之差的绝对值和最大值之差的绝对值中的较小的就是第三种情况的解(未验证)

(4)先哈希映射,然后遍历映射数组,fun_2

 1 #include <iostream>
 2 #include <queue>
 3 #include <climits>
 4 #include <algorithm>
 5 #include <memory.h>
 6 #include <stdio.h>
 7 #include <map>
 8 using namespace std;
 9
10
11 vector<int> A;
12 //排序+选择最小相邻元素值
13 int fun_1()
14 {
15     sort(A.begin().A.end());
16     int i;
17     int ans = INT_MAX;
18     for(i = 0 ; i < A.size()-1 ; ++i)
19     {
20         int tmp = abs(A[i]-A[i+1]);
21         ans = min(ans,tmp);
22     }
23     return ans;
24 }
25 //哈希的思想,类似于基数排序
26 int fun_2()
27 {
28     int minNum = INT_MAX;
29     int maxNum = INT_MIN;
30     int i;
31     for(i = 0 ; i < A.size() ; ++i)
32     {
33         minNum = min(minNum,A[i]);
34         maxNum = max(maxNum,A[i]);
35     }
36     vector<int> calNum(maxNum-minNum+1);
37     for(i = 0 ; i < A.size() ; ++i)
38     {
39         calNum[A[i]-minNum]++;
40     }
41     int ans = INT_MAX;
42     bool flag = true;
43     int pre;
44     for(i = 0 ; i < calNum.size(); ++i)
45     {
46         if(calNum[i] >= 2)
47             return 0 ;
48         else if(calNum[i] == 1 && flag)
49         {
50             pre = i;
51             flag = false
52         }
53         else if(calNum[i] == 1 && !flag)
54         {
55             ans = min(ans,i-pre);
56             pre = i;
57         }
58     }
59     return ans;
60 }
61 int main()
62 {
63     return 0;
64 }

转载于:https://www.cnblogs.com/cane/p/3836737.html

July面试题整理系列(1)相关推荐

  1. 【大数据HBase系列】 HBase面试题整理

    文章目录 HBase面试题整理(一) 1. HBase的特点是什么? 2.HBase和Hive的区别? 3.HBase适用于怎样的情景? 4.描述HBase的rowKey的设计原则?(☆☆☆☆☆) 5 ...

  2. 面试题整理|50个NodeJS面试题

    面试题整理|50个NodeJS面试题 初级NodeJS面试题 中级NodeJS面试题 高级NodeJS面试题 <Nodejs仿微博网站> Node.js是一种服务器端脚本工具,使用它可以轻 ...

  3. dotNET面试题汇总系列连载(1):基础语法

    点击上方"dotNET全栈开发","设为星标" 加"星标★",每天11.50,好文必达 全文约4000字,预计阅读时间8分钟 马上要到202 ...

  4. futuretask java 并发请求_Java面试题整理一(侧重多线程并发)

    1..是否可以在static环境中访问非static变量? 答:static变量在Java中是属于类的,它在所有的实例中的值是一样的.当类被Java虚拟机载入的时候,会对static变量进行初始化.如 ...

  5. Java面试题基础系列

    Java面试题基础系列 1.面向对象的特征有哪些方面? 面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和 ...

  6. 尚学堂Java面试题整理

    博客分类: 经典分享 1. super()与this()的区别? - 6 -  2. 作用域public,protected,private,以及不写时的区别? - 6 -  3. 编程输出如下图形. ...

  7. Android 2017面试题整理

    似乎自去年下半年以来,大家跳槽的少了,还有有些公司裁员了,前几年火热的移动端.前端岗位也越来越少,回归理性.现在各大公司对移动Android/ios的需求基本要求都是三年以上相关经验,有过大型互联网项 ...

  8. 2020最全的BAT大厂面试题整理改版

    最全的BAT大厂面试题整理 版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.jianshu.com/p/c70989bd5f29 转载请标明出处: https://www. ...

  9. 【大牛疯狂教学】2020最全的BAT大厂面试题整理改版

    最全的BAT大厂面试题整理 版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.jianshu.com/p/c70989bd5f29 转载请标明出处: https://www. ...

  10. 安卓系统最新面试题(面试题整理,含答案)

    最近自己再找安卓系统方面的工作,所以安卓系统整体的知识点进行了整理,内容点涉及的比较多.可以选择自己不熟的层来看跟学习,如果小伙伴还有补充或者自己遇到的题,欢迎留言. 系统应用层: 四大组件:     ...

最新文章

  1. esp freertos_如何开始使用FreeRTOS和ESP8266
  2. 微软“影子系统”Windows SteadyState 末日将至
  3. Windows 编程[5] - 学习窗体生成的过程五
  4. 原生js封装table表格操作,获取任意行列td,任意单行单列方法
  5. php make test 作用,larablog 系列文章 06 - 测试:使用 PHPUnit 进行单元和功能测试
  6. ASP.NET MVC3 Action Filters详解(一)
  7. python工作技巧_4个基本的 Python 技巧让你的工作流程自动化
  8. calc(~,mac电脑set-cookies要域名和请求域名相同
  9. misc on starcraft----starcraft2
  10. Codeforces Round #568 (Div. 2)网卡垫底记
  11. nbi可视化_教您通过NBI大数据可视化工具零编码轻松实现桑基图的制作
  12. Python函数的输出
  13. 亚马逊结算一览(C#项目)
  14. ECMAScript和JavaScript的关系
  15. Vue2.0 —— 运用算法实现 AST 抽象语法树
  16. 浏览器突然不能上网,DNS问题
  17. XML的两种常见格式
  18. 超级计算机有啥用途,什么是超级计算机及其用途?
  19. linux系统c语言重命名文件,C语言文件操作函数
  20. Rancher 2.4正式发布!打造业界规模最大的云边协同集群

热门文章

  1. JavaScript之全局函数详解
  2. SqlServer中截取(获取)字符串中特定字符分割的每个元素
  3. Hibernate之多对多映射
  4. python语言字符串逆转顺序_Python字符串逐字符或逐词反转方法
  5. FISCO BCOS(九)——— WeBase的节点前置服务
  6. 如何复制网上的收费文本
  7. 用于保存计算机输入输出数据的材料及其,与房地产,电子,金融,汽车并称五大产业的是()...
  8. python赋值运算符_解释一下python中的赋值运算符
  9. python 联机_CoderZh首款Python联机对战游戏 - NancyTetris1.0倾情发布(一)
  10. linux apache php.ini,Linux Apache的.htaccess控制php.ini 与MIME类型