21xrx.com
2024-12-22 16:59:31 Sunday
登录
文章检索 我的文章 写文章
C++ 面试常见算法题及解答
2023-07-07 13:34:58 深夜i     --     --
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++面试中更好地应对算法题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复