21xrx.com
2025-04-07 02:33:28 Monday
文章检索 我的文章 写文章
经典C++算法题目
2023-07-10 20:45:38 深夜i     14     0
C++ 经典算法 题目 数据结构 编程练习

C++是一门流行且广泛应用的编程语言,许多经典的算法题目也是使用这种语言来实现的。下面介绍几道经典的C++算法题目。

1. 二分查找

二分查找算法是一种非常高效的查找算法,其时间复杂度为O(log n)。该算法通过在有序数据中逐步缩小待查找区间,从而找到目标值。

利用C++ STL库中的lower_bound()函数可以轻松实现二分查找算法。例如:

int binarySearch(vector<int>& nums, int target) {
  int low = 0, high = nums.size() - 1;
  while (low <= high) {
    int mid = (low + high) / 2;
    if (nums[mid] == target) return mid;
    else if (nums[mid] > target) high = mid - 1;
    else low = mid + 1;
  }
  return -1; // 没有找到目标值
}

2. 快速排序

快速排序算法是一种高效的排序算法,其时间复杂度为O(nlogn)。该算法通过每次选取一个pivot元素来将待排序数组划分为两个子数组,一个小于pivot,一个大于等于pivot,再递归地对两个子数组进行快速排序。

下面是一个使用C++实现的快速排序算法:

void quickSort(vector<int>& nums, int low, int high) {
  if (low >= high) return;
  int i = low, j = high;
  int pivot = nums[i];
  while (i < j) {
    while (i < j && nums[j] >= pivot) j--;
    nums[i] = nums[j];
    while (i < j && nums[i] <= pivot) i++;
    nums[j] = nums[i];
  }
  nums[i] = pivot;
  quickSort(nums, low, i - 1);
  quickSort(nums, i + 1, high);
}

3. 最大子序和

最大子序和是一个经典的动态规划问题,其目的是在给定的整数序列中,找到一个子序列,使其和最大。

利用动态规划思想,可以轻松实现该算法。例如:

int maxSubArray(vector<int>& nums) {
  int n = nums.size();
  int maxSum = nums[0];
  vector<int> dp(n, 0);
  dp[0] = nums[0];
  for (int i = 1; i < n; i++) {
    dp[i] = max(dp[i-1] + nums[i], nums[i]);
    maxSum = max(maxSum, dp[i]);
  }
  return maxSum;
}

以上三道经典C++算法题目,可以帮助我们更好地理解C++语言的使用和算法实现。如果你对算法和编程感兴趣,不妨试试这些题目,提升自己的技能水平。

  
  

评论区

请求出错了