21xrx.com
2025-03-29 15:27:57 Saturday
文章检索 我的文章 写文章
C++算法面试题及答案
2023-06-29 06:44:47 深夜i     92     0
C++ 算法 面试题 答案 编程能力

在成为一名真正的C++开发者前,您需要掌握算法。在面试过程中,无论是初级开发者还是高级开发者,算法都是必须掌握的一项技能。在这里,我们提供了一些C++算法面试题及答案,帮助您准备好面试。

1. 如何反转字符串?

使用C ++的标准库函数,可以很容易地反转字符串。选择以下代码:

#include <iostream>
#include <string>
using namespace std;
int main() {
  string str = "hello world";
  reverse(str.begin(), str.end());
  cout << str << endl;
  return 0;
}

输出应该为:dlrow olleh

2. 如何在C++中找到数组中的最大值和最小值?

使用C ++的标准库函数可以轻松找到数组中的最大值和最小值。以下是示例代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
  int nums[] = 78;
  int arraySize = sizeof(nums)/sizeof(nums[0]);
  int max_num = *max_element(nums, nums + arraySize);
  int min_num = *min_element(nums, nums + arraySize);
  cout << "The maximum number in the array is: " << max_num << endl;
  cout << "The minimum number in the array is: " << min_num << endl;
  return 0;
}

输出应该为:

The maximum number in the array is: 92

The minimum number in the array is: 12

3. 如何排序字符串数组?

对字符串数组进行排序,可以使用C ++的标准库函数sort。选择以下代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
  string strs[] = {"hello", "world", "c++", "language", "code"};
  int arraySize = sizeof(strs)/sizeof(strs[0]);
  sort(strs, strs + arraySize);
  for(int i = 0; i < arraySize; i++){
    cout << strs[i] << endl;
  }
  return 0;
}

输出应该为:

c++

code

hello

language

world

4. 如何找到两个已排序数组的中位数?

要查找两个排序数组的中位数,可以使用合并排序或分治算法。这里是一个使用分治算法的示例代码:

#include <vector>
#include <iostream>
using namespace std;
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
  int m = nums1.size();
  int n = nums2.size();
  if (m > n) {
    return findMedianSortedArrays(nums2, nums1);
  }
  int iMin = 0, iMax = m, halfLen = (m + n + 1) / 2;
  while (iMin <= iMax) {
    int i = (iMin + iMax) / 2;
    int j = halfLen - i;
    if (i < iMax && nums2[j-1] > nums1[i]){
      iMin = i + 1;
    }
    else if (i > iMin && nums1[i-1] > nums2[j])
      iMax = i - 1;
    
    else {
      int maxLeft = 0;
      if (i == 0) { maxLeft = nums2[j-1]; }
      else if (j == 0) { maxLeft = nums1[i-1]; }
      else { maxLeft = max(nums1[i-1], nums2[j-1]); }
      if ( (m + n) % 2 == 1 ) { return maxLeft; }
      int minRight = 0;
      if (i == m) { minRight = nums2[j]; }
      else if (j == n) { minRight = nums1[i]; }
      else { minRight = min(nums2[j], nums1[i]); }
      return (maxLeft + minRight) / 2.0;
    }
  }
  return 0.0;
}
int main() {
  vector<int> nums1{ 1, 2 }, nums2{ 3, 4 };
  double res = findMedianSortedArrays(nums1, nums2);
  cout << res << endl; // 输出应该为:2.5
  return 0;
}

5. 如何在C++中实现二分查找算法?

二分查找算法可以用于在已排序的数组中查找值。这里是一个使用递归的示例代码:

#include <iostream>
#include <vector>
using namespace std;
int binarySearch(vector<int> nums, int target, int left, int right) {
  if (left > right) {
    return -1;
  }
  int mid = (left + right) / 2;
  if (nums[mid] == target) {
    return mid;
  }
  else if (nums[mid] > target) {
    return binarySearch(nums, target, left, mid - 1);
  }
  else {
    return binarySearch(nums, target, mid + 1, right);
  }
}
int main() {
  vector<int> nums{ 1, 3, 6, 8, 10 };
  int target = 8;
  int res = binarySearch(nums, target, 0, nums.size() - 1);
  cout << res << endl; // 输出应该为:3
  return 0;
}

在准备C++面试时,学习这些算法解决方案并熟练掌握它们会使你在面试中更自信,更有竞争力。

  
  

评论区

请求出错了