算法面试问题总结

我收集的一些大厂面试题,我认为比较有价值的。

  1. image.png

    解法:排序+二分
    先将这n个士兵按照身高从小到大进行排序,每一排的人数最少一个最多n/k个,我们就通过这个进行二分查找,还需要写一个函数来判断是否满足要求。这个二分只有两个分支,与从0-n(有序)中找到缺失的数字这个题一样。

  2. image.png

    注意核酸检测是批量检测,现在可以用二分的方式来做,比如先检测一半的人数,通过这种方式来判断是在左区间还是右区间。

  3. image.png
  4. image.png
  5. image.png
  6. image.png
  7. 集五福问题,问集齐五福平均需要收集多少张卡片。

  8. 给定一个三角形如何生成一个点,让这个点在三角形内的概率相同,并且尽可能让这个点在三角形的概率大。

  9. 在一个先升序后降序的数组中,找出其中的最大值。
import sys

def search(nums):
    l = 0
    r = len(nums) - 1
    while(l < r): #注意这里
        mid = (l + r) // 2
        if nums[mid] > nums[mid+1]:
            r = mid
        elif nums[mid] == nums[mid+1]:
            if nums[l] < nums[r]: #需要考虑重复值来进行收缩
                l += 1
            else:
                r -= 1
        else:
            l = mid + 1
    return nums[l]

if __name__ == '__main__':
    test = [1, 2, 2, 2, 2, 3, 1]
    test1 = [1, 3, 2, 2, 2, 2, 1]
    print(search(test))
  1. 从N个数中等概率抽取M个数。
    参考:https://blog.csdn.net/bitcarmanlee/article/details/83016377

  2. image.png

    参考:https://blog.csdn.net/xushiyu1996818/article/details/84936832

  3. 在内存有限的情况下,统计整个语料库文本的词频。

  4. 完全二叉树的节点数的计算,要求时间复杂度小于O(N)
    参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247485057&idx=1&sn=45a3b89a4efef236cb662d5505d7ce36&chksm=9bd7f889aca0719f4915de681f983355e187151030991ab1944494ffe4b73e484068b85eb01e&mpshare=1&scene=1&srcid=0830axHcdn4hGbllwj5L3DP5&sharer_sharetime=1598755665315&sharer_shareid=31cfc3204753e502882065a08ccbd8df&key=9c1744d1bffeab4b5fc28f6afadb1159d5e974306290ed589d9cf48d0a1cd21f0d7f6bbe8247453c2ed03e3de045e8ab87c6e696f5873376bc784df97d5d3ab95a5a4cfbfb2a5cbe31ce876b7a8f67c3ed6678f652d69fd2a19b8debbc75366a75dd0f9349413ded0a66ad40206d596a8607c837c95a78c8fe2bc8a935a246f8&ascene=1&uin=MTAyMjY1NTExMA%3D%3D&devicetype=Windows+10+x64&version=62090529&lang=zh_CN&exportkey=A1e11qFZ4gmNULPoQedCPvs%3D&pass_ticket=GM%2FlHixpWsXU37dBRAHSrqHa4Xwk4ENT3FwhM3XWGuduTwNzv2ZztZmPrd9JHM4P

  5. sklearn中如何对特征进行多项式扩充。

这个问题本质上是一个求多项式不重复的项有多少个,可以列递方程来解决。

你可能感兴趣的:(算法面试问题总结)