21xrx.com
2025-03-21 21:32:37 Friday
文章检索 我的文章 写文章
C++面试常见算法题及解答
2023-07-07 01:53:32 深夜i     25     0
C++ 面试 算法题 常见 解答

C++是一种非常流行的编程语言,许多程序员都喜欢使用它来完成编程任务。而在C++面试中,算法题是重要的一部分,因为它可以展示应聘者的编程技能和思维能力。下面是一些C++面试常见的算法题及解答。

1.反转字符串

问题描述:将一个字符串反转,例如将“hello world”反转成“dlrow olleh”。

解答:使用一个循环,遍历字符串中的每个字符,然后将其插入到新字符串的开头。最后返回新字符串。

string reverseString(string s) {
  string result = "";
  for (int i = s.length()-1; i >= 0; i--) {
    result += s[i];
  }
  return result;
}

2. 最长公共前缀

问题描述:给定两个或多个字符串,找出它们之间最长的共同前缀。

解答:首先比较字符串数组中第一个字符串和其他所有字符串的第一个字符,如果相同则继续向下比较下一个字符,直到找到不同的字符。最后返回前缀字符串。

string longestCommonPrefix(vector<string>& strs) {
  if (strs.size() == 0)
    return "";
  
  for (int i = 0; i < strs[0].size(); i++) {
    char c = strs[0][i];
    for (int j = 1; j < strs.size(); j++) {
      if (i == strs[j].size() || strs[j][i] != c) {
        return strs[0].substr(0, i);
      }
    }
  }
  return strs[0];
}

3.两数之和

问题描述:给定一个整数数列和一个目标值,找出数列中和为目标值的两个数。

解答:使用哈希表记录每个数的位置,一边遍历一边检查目标值减去当前数是否在哈希表中出现过。

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

以上是一些C++面试中常见的算法题及解答,当然还有许多其他的算法题目等待着程序员去探索和解决。对于应聘者来说,在面试前对这些算法题进行研究和练习,能够帮助他们更好地准备面试,展示出自己的编程技能和思维能力。

  
  

评论区