蔚来 2022 07 27 算法岗笔试算法题

1.题目可以转化为 给定n个连续空间(left, right)和m个数组成的单调增数组,如何高效查找数组里面的数是否在连续空间里面?

手写二分就行。
def binary_search(left, right, valid_idx):
     # valid_idx is ascending list 
    
    if left > valid_idx[-1] or right < valid_idx[-1] : return False
    
    l,r = 0, len(valid_idx) -1 
    while l < r:
        mid = (l + r) >> 1
        if valid_idx[mid] < left:
            l = mid + 1
        else:
            r = mid 
    if valid_idx[l] <= right:
        return True
    return False



2.题目:  给定一个数组 对数组里面的数进行操作, 操作是乘一个质数, 要求最少操作多少次, 能够使得数组任何两个元素相乘为完全平方数?(数据范围3*10^5 复杂度应该在nlogn到n2之间,单个数的范围是在10^5到10^9之间)

思路是:将任何一个数拆开为质数相乘,统计每个数的质数个数和种类即可。


本质是一个质因数分解。如何分解也是一个问题


3.题目: 给定一个数组,可以对数组进行操作,操作是将任意一个元素移到开头或者结尾,问最少操作多少次能够使得数组变成非严格升序数组?(数据范围3*10^5 复杂度应该在nlogn到n2之间)

没写出来,
思路是: 将原数组排序,求原数组与排序后数组的最长连续子串,然后总的长度-最长连续子串即可。
比如 [4,3,5,7,6] 排序后为 [3,4,5,6,7]
最长连续子串为[4,5,6]  注意这个最长连续指的是在排序中连续
答案为 5 - 3 = 2


总评价:难
没写出来是我最近没怎么刷题,一时没想到解法。 哎



#蔚来笔试#
全部评论
cy
点赞 回复 分享
发布于 2022-07-28 16:18
cy
点赞 回复 分享
发布于 2022-07-29 16:01
cy
点赞 回复 分享
发布于 2022-07-29 20:32
算法岗是SE吗
点赞 回复 分享
发布于 2022-08-02 19:19
题目3 排序后取最长连续子串有点问题的。比如 [100,4,200,1,3,2] 排序后取连续子串为4 最后次数为2。应该无法实现吧。我觉得应该是不用排序,直接取最长的连续数值的最长子序列,然后再相减。不知道对不对
点赞 回复 分享
发布于 2022-08-09 14:12

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
4 25 评论
分享
牛客网
牛客企业服务