1. /*简单,时间复杂度也低*/ #

  2. include < iostream > using namespace std;

  3. `

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

int main()`

  1. {

  2. int n, t = 0, syn = 0;

  3. int price[1000] = {

  4. 0

  5. };

  6. cin >> n;

  7. while(n--)

  8. {

  9. cin >> t;

  10. price[t] = 1;

  11. }

  12. t = 0;

  13. for(int i = 0; i < 1000; i++)

  14. {

  15. if(price[t] && syn < 3) syn++;

  16. if(syn == 3) break;

  17. t++;

  18. }

  19. syn == 3 ? cout << t : cout << -1;

  20. }

2、一个数轴上共有 N 个点,第一个点的坐标是度度熊现在位置,第 N-1 个点是度度熊的家。现在他需要依次的从 0 号坐标走到 N-1 号坐标。

但是除了 0 号坐标和 N-1 号坐标,他可以在其余的 N-2 个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?

解答:

从 N-2 个坐标中选出一个点,并直接将这个点忽略掉。直接忽略一个点只会直接影响到,这个节点前后节点的距离。这个 影响的距离我们暂且命名为优化距离,将所有节点按顺序组成三个节点的集合,通过这种方式只需要通过一次循环便能得到结果。

优化距离越大说明如果去掉这个集合的中点元素将会使得总距离越短,下面上代码。

  1. import

  2. java.util.

  3. Scanner;

  4. publicclass

  5. Main

  6. {

  7. publicstaticvoid

  8. main(String[] args)

  9. {

  10. Scanner

  11. scanner = new

  12. Scanner(System.in);

  13. int

  14. length = scanner.nextInt();

  15. int[] arrays = newint[length];

  16. for(int i = 0; i < length; i++)

  17. {

  18. arrays[i] = scanner.nextInt();

  19. }

  20. /**

  21. * sum 总距离

  22. * repetition 三个节点 中被重复计算的总距离

  23. * select 优化距离最大的 三个节点两两相加的距离

  24. * add 三个结尾距离为 max 中 头尾节点的距离

  25. * last 最后三个节点中 尾距离没有被计算两次 需要加上

  26. * optimizeDistance 优化距离

  27. */

  28. int

  29. sum = 0,

  30. int

  31. repetition = 0,

  32. intselect = 0,

  33. int

  34. add = 0,

  35. intlast = 0,

  36. int

  37. optimizeDistance = 0;

  38. for(int i = 0; i <= (arrays.length - 3); i++)

  39. {

  40. intbegin = arrays[i];

  41. int

  42. mid = arrays[i + 1];

  43. intend = arrays[i + 2];

  44. //三个点之间的距离

  45. int

  46. threePointDistance = Math.abs(mid - begin) + Math.abs(end - mid);

  47. //两个点之间的距离 即被多次计算待会需要减掉的距离

  48. int

  49. twoPointDistance = Math.abs(end - mid);

  50. int

  51. contrast = threePointDistance - Math.abs(begin - end);

  52. repetition += twoPointDistance;

  53. sum += threePointDistance;

  54. last = twoPointDistance;

  55. if(contrast > optimizeDistance)

  56. {

  57. optimizeDistance = contrast;

  58. select = threePointDistance;

  59. add = Math.abs(end - begin);

  60. }

  61. }

  62. System.

  63. out.println((sum - select + last) - repetition + add);

  64. }

  65. }

3、度度熊最近对全排列特别感兴趣,对于 1 到 n 的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 ‘>’ 和 ‘<’ )使其成为一个合法的不等式数列。

但是现在度度熊手中只有 k 个小于符号即(’<’’)和 n-k-1 个大于符号(即’>’),度度熊想知道对于 1 至n 任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列。

解答:

dp[i][j] = (dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j + 1)) % 2017;

dp[i][j]表示有 i 个数字及 j 个小于号所能组成的数量(大于号数量当然是 i - j - 1 次,后面需要使用)

而加入第 i + 1 个数字时,分以下四种情况:

  1. 如果将 i+1 插入当前序列的开头,即有了 1<2,加入后成为 3>1<2,会发现等于同时加入了一个大于号!(此时可以无视 1 与 2 之间的关系,因为 i+1>i)

  2. 如果将 i+1 插入当前序列末尾,即 1<2 变成了 1<2<3,会发现等于同时加入了一个小于号!(此时可以无视 1 与 2 之间的关系,因为 i+1>i)

  3. 如果将i+1加入一个小于号之间,即已经有 1<2了,向中间加入3,会发现变成了1<3>2,等于同时加入了一个大于号!

  4. 如果将 i+1 加入一个大于号中间,即有了 2>1,变成了 2<3>1,等于同时加入了一个小于号!

综上所述,dp[i][j]等于以上四种情况之和:

dp[i - 1][j] 将 i 加在开头等于加入一个大于号,即要求 i-1 个数时已经有了 j 个小于号;

dp[i - 1][j - 1] 将 i 加在末尾等于加入一个小于号,即要求 i-1 个数时已经有了 j-1 个小于号;

dp[i - 1][j] * j 将 i 加在任意一个小于号之间,等于加入了一个大于号,即要求 i-1 个数时已经有了 j 个小于号,每个小于号都可以进行这样的一次插入;

dp[i - 1][j - 1] * (i- j - 1) 将 i 加载任意一个大于号之间,等于加入了一个小于号,即要求i-1 个数时有了 j-1 个小于号;

而此时共有(i - 1) - (j - 1)- 1 个大于号,每个大于号都要进行一次这样的操作合并同类项即为dp[i][j] = (dp[i - 1][j - 1] * (i - j) + dp[i - 1][j] * (j + 1))。

最后要记得取模。

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子,java面试经验技巧相关推荐

  1. Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

    前几天我们公司做了一件蠢事,非常非常愚蠢的事情.我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿. 但是,天有不测风云,公司技术总监.人事总监两位大佬突然降临到我们事业线,叫上我 ...

  2. Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子,由浅入深

    前几天我们公司做了一件蠢事,非常非常愚蠢的事情.我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿. 但是,天有不测风云,公司技术总监.人事总监两位大佬突然降临到我们事业线,叫上我 ...

  3. AliP8大牛鼎力推荐Java岗开发进阶实战文档:Spring全家桶+Docker+Redis

    微服务最近几年在互联网行业是越来越火热,spring也是程序员不得不掌握的技术点,今天我们就来了解关于微服务中的springcloud.Docker以及spring技术源码解析.深入springboo ...

  4. 美团内推:java高级开发(一面+二面+三面),面试58题实拍!

    美团内推(一面+二面+三面)面试题目 美团一面(电话) 自我介绍 项目介绍 Redis介绍 了解redis源码么 了解redis集群么 Hashmap的原理,增删的情况后端数据结构如何位移 hashm ...

  5. 招聘:JAVA软件开发工程师

    招聘:java软件开发工程师 本公司所有新创办的创业型小公司. 研发团队6-7个人. 工作地点:厦门软件园二期观日路 现需招聘java软件开发工程师2-3名 要求: 1.有良好的沟通能力.团队合作精神 ...

  6. 【长期有效】招聘-java高级开发工程师

    招聘-java高级开发工程师 目前公司业务发展迅速,需要优秀技术人员的加入,我们的标准非常简单. 我们不要求: 1.不要求你是名校毕业. 2.不要求你具有三年以上java开发经验,当然必要的开发经验是 ...

  7. 离职后,想去原来的公司上班怎么办?

    在职场生涯中难免会有一些试错成本,在众多试错成本当中就有一项是离职之后想回到上一家公司.想找到这个问题的答案并不难,但应三思而后行,考虑好自己的实际情况,也要考虑好上家公司的现状.离职后,想去原来的公 ...

  8. 近期Java高级开发岗面试总结

    原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...

  9. 震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?

    据说,2022 年算法岗遇冷,BAT 暑期实习甚至收不到简历,Java 反而爆炸. 难道,Java 的春天(映射 Spring 全家桶)又要来了吗?作为 Java 领域的优质创作者(见下图),又可以在 ...

最新文章

  1. 2022-2028年中国再生天然橡胶行业市场调查分析及未来前景分析报告
  2. 未能加载文件或程序集“*****.dll”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自HRESULT:0x80131040)
  3. python程序设计——函数设计与调用
  4. 【转载】细聊冗余表数据一致性(架构师之路)
  5. openGauss 2.1.0 闪回特性
  6. matlab中的g2(t)是什么,matlab实验1-8带答案,,
  7. Python计算任意单调曲线在给定区间上的近似长度
  8. margin和padding的区别和用法
  9. jquery $.get和$.post设置请求超时error处理
  10. 我对软件发展的思考,一个不变却一直在变的话题
  11. Java将双精度转换为字符串
  12. Mybatis sqlsession解析
  13. 网线制作ppt_制作网线图解讲解.ppt
  14. python extract_convert.py对应代码解读抽取式提取+生成式提取摘要代码解读------摘要代码解读1
  15. ORA-01950: 对表空间 USERS无权限
  16. 流程效率低?这里有3个流程优化的建议
  17. 2020年务必要了解的最好用的14款CI/CD工具
  18. 产品经理必不可少的证书!
  19. 指法练习软件ECAI使用指南
  20. Uinux/linux vi保存退出命令 (如何退出vi)

热门文章

  1. Windows 7 开机原理
  2. Linux中在zsh下如何安装autojump
  3. pcap文件格式及文件解析
  4. 网络编程-arp协议
  5. SQL分析——常见问题十(日期查询)
  6. 物联网卡收费标准有哪些
  7. jquery html隐藏标签,js(jQuery)控制html元素隐藏
  8. 互联网+循环经济案例
  9. Power BI Desktop启动报错:调用的目标发生了异常
  10. 比较详细的微信小程序开发流程,一步一步跟着做就好了。