21xrx.com
2025-03-31 16:24:15 Monday
文章检索 我的文章 写文章
C++面试常见算法题
2023-07-04 23:16:37 深夜i     23     0
C++ 面试 算法 常见题 数据结构

C++作为一门常用的编程语言,在面试过程中,经常会涉及到一些算法题目。下面是几个常见的C++面试算法题。

1. 翻转字符串

要求:将一个字符串翻转,例如“abcd”翻转后为“dcba”。

解析:可以使用两个指针,一个从前往后遍历,一个从后往前遍历,交换它们指向的字符,直到两个指针相遇。

示例代码:

void reverseString(char s[]) {
  int len = strlen(s);
  for (int i = 0, j = len - 1; i < j; i++, j--) {
    char tmp = s[i];
    s[i] = s[j];
    s[j] = tmp;
  }
}

2. 判断回文数

要求:判断一个整数是否为回文数,例如121是回文数,123不是回文数。

解析:可以将数字转化为字符串,然后判断字符串是否为回文串;也可以将数字从低位到高位和从高位到低位依次取出,并比较它们是否相等。

示例代码:

bool isPalindrome(int x) {
  if (x < 0 || (x % 10 == 0 && x != 0))
    return false;
  
  int reversed = 0;
  while (x > reversed) {
    reversed = reversed * 10 + x % 10;
    x /= 10;
  }
  return x == reversed || x == reversed / 10;
}

3. 两数之和

要求:在一个整数数组中找到两个数,使得它们的和等于一个给定的目标值。

解析:可以使用哈希表记录已经遍历的数字,对于每一个新的数字i,如果目标值减去i在哈希表中出现过,则找到了结果;否则将i加入哈希表中。

示例代码:

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

以上是三个C++面试常见算法题目的解析和示例代码,希望能对面试者有所帮助。

  
  

评论区

请求出错了