微软面试高频算法题解析与代码实现(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