获赞
19
粉丝
11
关注
0
看过 TA
40
北京师范大学
2021
C++
IP属地:陕西
暂未填写个人简介
私信
关注
2020-03-18 11:46
已编辑
中国银行_软件中心_软件工程师
面试官首先让介绍自己,然后问了下项目经历就开始撕代码了。一共两道题: 给一个数组,求出长度为偶数的连续子数组的和的最大值。和leetcode上一道题类似,但原题对子数组长度的奇偶性没有要求。 给定一个长度为n的数组,该数组中的每个元素在1到n范围内,要求在O(n)的时间复杂度,O(1)的空间复杂度下,打印1到n这n个数各出现了多少次。 第二道题不是很有思路,求知道的同学可以留言下思路。
瓜皮王国的瓜皮小战士:第二题感觉本质就是让一个数组能够存储两种信息,一个是当前index这个数字出现的个数,另一个就是要确认这个index上的数字是否在正确的位置上。 方法一可以参考leetcode 41,吧当前index上的数字和他应该属于的index上面的数字进行交换, 比如a[10]上面放了11就不需要移动,放了8的话就把8和a[7]上面的数字进行交换。而当交换成功之后为了标记当前位置即a[7]上面的数字已经到了正确位置,则可以采取前面楼层的做法,比如把这个数字置为负数比如-1,然后每次有数字移动到这个index7上的时候,-1减一,最后当前index+1这个数字出现的次数就是此位置负数变正再减一。 方法二就是如果这数组的数字比较小的话,当前位置这个数字是一个interger,有32位,可以用前16位去存当前index+1这个数字的出现的次数。这就有点取巧了。 总之这题主要就是通过用一个数组存储两种信息,不管是用正负来代替boolean,还是用interger或者long多出来的位数存储,核心就是如何用一个数组存2N的信息。
投递微软等公司8个岗位 >
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务