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

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

【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

main(String[] args)

  1. {

  2. Scanner

  3. scanner = new

  4. Scanner(System.in);

  5. int

  6. length = scanner.nextInt();

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

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

  9. {

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

  11. }

  12. /**

  13. * sum 总距离

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

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

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

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

  18. * optimizeDistance 优化距离

  19. */

  20. int

  21. sum = 0,

  22. int

  23. repetition = 0,

  24. intselect = 0,

  25. int

  26. add = 0,

  27. intlast = 0,

  28. int

  29. optimizeDistance = 0;

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

  31. {

  32. intbegin = arrays[i];

  33. int

  34. mid = arrays[i + 1];

  35. intend = arrays[i + 2];

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

  37. int

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

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

  40. int

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

  42. int

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

  44. repetition += twoPointDistance;

  45. sum += threePointDistance;

  46. last = twoPointDistance;

  47. if(contrast > optimizeDistance)

  48. {

  49. optimizeDistance = contrast;

  50. select = threePointDistance;

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

  52. }

  53. }

  54. System.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值