> 技术文档 > 微软面试高频算法题解析与代码实现(C++)_微软算法面试题

微软面试高频算法题解析与代码实现(C++)_微软算法面试题

作为全球顶尖科技公司,微软对人才的招聘要求十分严格,尤其是在算法工程师的选拔上。算法面试是微软招聘流程中不可或缺的一环,考察候选人对算法和数据结构的理解和应用能力。本文将列举微软面试中出现频率较高的 10 道算法题,并使用 C++ 语言给出相应的代码实现,帮助大家更好地备战微软算法面试。

1. 两数之和

题目描述: 给定一个整数数组和一个目标值,找出数组中两个数的索引,使得它们的和等于目标值。

代码实现:

#include #include std::vector<int> twoSum(const std::vector<int>& nums, int target) {  std::unordered_map<int, int> num_index; for (int i = 0; i < nums.size(); ++i) {  int complement = target - nums[i]; if (num_index.count(complement)) {  return { num_index[complement], i}; } num_index[nums[i]] = i; } return { };}

2. 寻找峰值

题目描述: 给定一个单调递增的数组,然后又单调递减。找出数组中的峰值元素。

代码实现:

#include int findPeakElement(const std::vector<int>& nums) {  int left = 0, right = nums.size() - 1; while (left < right) {  int mid = left + (right - left) / 2; if (nums[mid] > nums[mid + 1]) {  right = mid; } else {  left = mid + 1; } } return nums[left];}

3. 旋转数组的最小值

题目描述: 给定一个排序数组,该数组被旋转过。找到数组中的最小值。

代码实现:

#include int findMin(const std::vector<int>& nums) {  int left = 0, right = nums.size() - 1; while (left < right