21xrx.com
2024-12-23 02:04:17 Monday
登录
文章检索 我的文章 写文章
C++面试常见算法题
2023-07-04 23:16:37 深夜i     --     --
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++面试常见算法题目的解析和示例代码,希望能对面试者有所帮助。

  
  

评论区

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