21xrx.com
2025-03-31 19:47:27 Monday
文章检索 我的文章 写文章
C++ 面试常见算法题及解答
2023-07-07 13:34:58 深夜i     14     0
C++ 面试 算法题 解答 常见

在C++面试中,经常会被面试官问到算法题,所以熟悉常见的算法题非常重要。下面将介绍几个常见的C++算法题及其解答。

1. 反转字符串

将一个字符串反转输出。例如输入:“Hello World”,输出:“dlroW olleH”。

解答:可以使用双指针遍历字符串,依次交换两个指针所指的字符,直到两个指针相遇。代码如下:

void reverseStr(string& s) {
  int left = 0, right = s.size() - 1;
  while (left < right) {
    swap(s[left], s[right]);
    left++;
    right--;
  }
}

2. 回文数判断

判断一个数是否为回文数。例如:121,12321。

解答:可以将数字转为字符串,然后检查字符串是否为回文串。代码如下:

bool isPalindrome(int x) {
  if (x < 0) return false;
  string s = to_string(x);
  int left = 0, right = s.size() - 1;
  while (left < right) {
    if (s[left] != s[right]) return false;
    left++;
    right--;
  }
  return true;
}

3.有效的括号

给定一个只包含()[]{}的字符串,判断字符串是否有效。例如:“()”、“(][])”。

解答:可以使用栈来判断括号是否匹配。遇到左括号,将其入栈,遇到右括号,弹出栈顶元素并判断是否匹配。代码如下:

bool isValid(string s) {
  stack<char> stk;
  for (char c : s) {
    if (c == '(' || c == '[' || c == '{') {
      stk.push(c);
    } else {
      if (stk.empty()) return false;
      if (c == ')' && stk.top() != '(') return false;
      if (c == ']' && stk.top() != '[') return false;
      if (c == '}' && stk.top() != '{') return false;
      stk.pop();
    }
  }
  return stk.empty();
}

4.两数之和

给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的索引。例如:{2,7,11,15},目标值为9,则输出[0,1]。

解答:可以使用哈希表,将数字及其索引存储在哈希表中,遍历数组时,判断目标值与当前元素的差是否已经在哈希表中出现过。如果出现过,则返回已经出现过的元素索引和当前元素索引。代码如下:

vector<int> twoSum(vector<int>& nums, int target) {
  unordered_map<int, int> mp;
  for (int i = 0; i < nums.size(); i++) {
    int complement = target - nums[i];
    if (mp.count(complement)) {
      return {mp[complement], i};
    } else {
      mp[nums[i]] = i;
    }
  }
  return {};
}

以上就是几个常见的C++面试算法题及其解答。希望可以帮助大家在C++面试中更好地应对算法题。

  
  

评论区

请求出错了