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

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。

但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。

那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。

“淡黄的长裙蓬松的头发

“WC,见证历史,今年高考推迟了一个月,当年我要是碰上这种事,我岂不分分钟985?”

同事:“这就是你考不上本科的原因?”

我:“呃~”

“WC,阿水水这是要去滔博吗?”

同事:“这跟你考不上本科有什么关系?”

我:“喂喂?”

这时,一位从没见过的中年地中海出现在我的视线里:“各位,注意一下,为了考察大家的编程能力,5分钟之后有一场测试,把自己的代码保存好后,到大会议室集合。”

同事甲:“这不是总部来的技术总监吗?”

同事乙:“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.  `}`

</pre>

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.  `/**`

22.  `* sum 总距离`

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

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

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

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

32.  `* optimizeDistance 优化距离`

34.  `*/`

35.  `int`

36.  `sum =  0,`

37.  `int`

38.  `repetition =  0,`

39.  `intselect =  0,`

40.  `int`

41.  `add =  0,`

42.  `intlast =  0,`

43.  `int`

44.  `optimizeDistance =  0;`

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

46.  `{`

47.  `intbegin = arrays[i];`

48.  `int`

49.  `mid = arrays[i +  1];`

50.  `intend = arrays[i +  2];`

51.  `//三个点之间的距离`

52.  `int`

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

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

55.  `int`

56.  `twoPointDistance =  Math.abs(end  - mid);`

57.  `int`

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

59.  `repetition += twoPointDistance;`


### 最后

### **[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**

![](https://img-blog.csdnimg.cn/img_convert/dff92c27d5214a04439cbb22a8d5f0fb.png)

![](https://img-blog.csdnimg.cn/img_convert/a521671fb568290bf9f2c15321deb45e.png)

![](https://img-blog.csdnimg.cn/img_convert/f8fa0a58022988d6b8c0b737346026b2.png)

![](https://img-blog.csdnimg.cn/img_convert/bd541a704de10721c8536bd8ecab17f4.png)

![](https://img-blog.csdnimg.cn/img_convert/8fa072a8aedd74929a8b1a5821e448a4.png)

![](https://img-blog.csdnimg.cn/img_convert/e22d9be786786fb56c2135ffa14769fe.png)


由于篇幅原因,就不多做展示了
5589)]

[外链图片转存中...(img-f8ubtRwt-1630464155590)]

[外链图片转存中...(img-EVZ3gpgA-1630464155592)]

[外链图片转存中...(img-J4lnw2Yf-1630464155593)]

[外链图片转存中...(img-v0Y2Ji7t-1630464155594)]

[外链图片转存中...(img-Ceict68a-1630464155595)]


由于篇幅原因,就不多做展示了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值