21xrx.com
2024-09-19 09:39:17 Thursday
登录
文章检索 我的文章 写文章
C++面试算法
2023-07-07 17:29:18 深夜i     --     --
C++ 面试 算法 数据结构 编程技能

C++作为一种经典的编程语言,应用广泛,其面试题目也是层出不穷。尤其是在算法面试中,C++的运用充满了技巧和挑战。下面我们将具体介绍一些常见的C++面试算法题目及其解法。

1. 数组翻转

给定一个数组,编写一个函数来翻转数组中的元素。例如,数组[1,2,3,4,5]翻转后变为[5,4,3,2,1]。

解法:可以使用C++内置的算法函数reverse()。具体代码如下:

vector reverseArray(vector & nums) {

  reverse(nums.begin(), nums.end()); //翻转数组

  return nums; //返回结果

}

2. 找出重复元素

给定一个整数数组,其中某些元素重复出现一次或多次,请找出所有重复出现的元素。

解法:可以使用哈希表来记录每个元素出现的次数,并将出现次数大于1的元素加入结果集中。具体代码如下:

vector findDuplicates(vector & nums) {

  unordered_map mp; //定义用于存储元素出现次数的哈希表

  vector res; //定义结果数组

  for(int i = 0; i < nums.size(); i++) {

    mp[nums[i]]++; //统计每个元素出现的次数

  }

  for(auto p: mp) { //遍历哈希表

    if(p.second > 1) res.push_back(p.first); //如果元素出现次数大于1,则加入结果数组

  }

  return res; //返回结果

}

3. 最大子序列和

给定一个整数数组nums,找到具有最大和的连续子数组(至少包含一个元素),返回该子数组的最大和。

解法:可以使用贪心算法和动态规划算法来解决该问题。下面我们介绍动态规划算法的解法。具体代码如下:

int maxSubArray(vector & nums) {

  int n = nums.size();

  vector dp(n, 0); //定义dp数组,dp[i]表示以nums[i]为结尾的最大子序列和

  dp[0] = nums[0]; //初始化dp数组

  int res = dp[0]; //记录结果

  for(int i = 1; i < n; i++) {

    dp[i] = max(nums[i], nums[i]+dp[i-1]); //状态转移方程

    res = max(res, dp[i]); //更新结果

  }

  return res; //返回结果

}

以上仅是C++面试算法中的部分题目及其解法,还有很多其他有趣、有挑战性的算法题等待着你去探索。希望本文对你有所帮助,祝你面试顺利!

  
  

评论区

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