2021年9月底,百度NLP岗位面试题2道

julyedu_7 2021-12-07 11:49:00

1.先序遍历(要求递归和迭代两种方式)

方法一:递归

树本身就有递归的特性,因此递归方法最简单,这里直接放上代码,需要说明的是,中序遍历,前序遍历和后序遍历可采用相同的代码模板完成实现。

Pythonclass Solution:
 def preorderTraversal(self, root: TreeNode) -> List[int]:
 if not root:
 return []
 return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)

时间复杂度:O(n),n 为树的节点个数

空间复杂度:O(h),h 为树的高度

方法二:迭代

代码如下:

Pythonclass Solution:
 def preorderTraversal(self, root: TreeNode) -> List[int]:
 if not root:
 return []
        stack = []
        res = []
        cur = root
 while stack or cur:
 while cur:
                stack.append(cur)
                res.append(cur.val)
                cur = cur.left
            cur = stack.pop()
            cur = cur.right
 return res

时间复杂度:O(n),n 为树的节点个数

空间复杂度:O(h),h 为树的高度

限时1分钱秒杀>>隐马尔可夫HMM精讲 特训 [NLP高级班预习课之一] - 七月在线

2.旋转数组寻找k

思路一:暴力解法

直接遍历整个数组,找到目标值target

代码如下:

Pythonclass Solution:
 def search(self, nums: List[int], target: int) -> int:
 for i,num in enumerate(nums):
 if num == target:
 return i
 return -1

时间复杂度:O(n)

空间复杂度:O(1)

思路二:二分查找

先要设置整个数组的左右两端端点:left = 0,right = len(nums) - 1

1、若 target == nums[mid],直接返回

2、若 nums[left] <= nums[mid],说明左侧区间 [left,mid]「连续递增」。此时:

若 nums[left] <= target <= nums[mid],说明 target 位于左侧。令 right = mid-1,在左侧区间查找

否则,令 left = mid+1,在右侧区间查找

3、否则,说明右侧区间 [mid,right]「连续递增」。

此时:

若 nums[mid] <= target <= nums[right],说明 target 位于右侧区间。令 left = mid+1,在右侧区间查找

否则,令 right = mid-1,在左侧区间查找

代码如下:

Pythonclass Solution:
 def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums) -1
 while left <= right:
            mid = left + (right - left) // 2
 if nums[mid] == target:
 return mid
 elif nums[left] <= nums[mid]:
 if nums[left] <= target < nums[mid]:
                    right = mid - 1
 else:
                    left = mid + 1
 else:
 if nums[mid] < target <= nums[right]:
                    left = mid + 1
 else:
                    right = mid - 1
 return -1

时间复杂度:O(logn)

空间复杂度:O(1)

...全文
489 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69

社区成员

发帖
与我相关
我的任务
社区描述
本2022新大厂AI面试1000题,每周节选今2022年各大厂的最新面试题,包括且不限于美团、网易、伴鱼、作业帮、商汤、腾讯、滴滴、蚂蚁金服、好未来、百度等等,一方面算法,一方面AI,且有答案有解析
社区管理员
  • v_JULY_v
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧