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

同事乙:“WC,第一次看到大佬。”

我:“你们难道没有听到要测试吗?”

后来,我们就不明不白的进行了一场测试,当我一片空白的试卷交上去,把一片空白的脑子带出来,听着同事们谈论着测试答案。

同事告诉我,这份算法题来自百度,并给了我一份文件。

文件具体内容如下:

1、度度熊想去商场买一顶帽子,商场里有 N 顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?

输入描述:

首先输入一个正整数 N(N <= 50),接下来输入 N 个数表示每顶帽子的价格(价格均是正整数,且小于等于 1000)

输出描述:

如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1

输入例子 1:

10

10 10 10 10 20 20 30 30 40 40

输出例子 1:

30

解答:

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

  2. include < iostream > using namespace std;

  3. int main()

  4. {

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

  6. int price[1000] = {

  7. 0

  8. };

  9. cin >> n;

  10. while(n--)

  11. {

  12. cin >> t;

  13. price[t] = 1;

  14. }

  15. t = 0;

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

  17. {

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

  19. if(syn == 3) break;

  20. t++;

  21. }

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

  23. }

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. }

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值