21xrx.com
2024-11-10 00:46:42 Sunday
登录
文章检索 我的文章 写文章
C++算法面试题及答案
2023-06-29 06:44:47 深夜i     --     --
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++面试时,学习这些算法解决方案并熟练掌握它们会使你在面试中更自信,更有竞争力。

  
  

评论区

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