当前位置:   article > 正文

【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)

【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)

牛客对应链接:数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 


一、分析题目

排序 + 模拟。

注意值连续,位置可以不连续!小心处理数字相同的情况。 


二、代码 

  1. //值得学习的代码
  2. class Solution
  3. {
  4. public:
  5. int MLS(vector<int>& arr)
  6. {
  7. sort(arr.begin(), arr.end());
  8. int n = arr.size(), ret = 0;
  9. for(int i = 0; i < n; )
  10. {
  11. int j = i + 1, count = 1;
  12. while(j < n)
  13. {
  14. if(arr[j] - arr[j - 1] == 1)
  15. {
  16. count++;
  17. j++;
  18. }
  19. else if(arr[j] - arr[j - 1] == 0)
  20. {
  21. j++;
  22. }
  23. else
  24. {
  25. break;
  26. }
  27. }
  28. ret = max(ret, count);
  29. i = j;
  30. }
  31. return ret;
  32. }
  33. };

三、反思与改进

因为这种类型的题目做了很多,没有仔细读请题意就先入为主,导致理解错题目要求(原题并不复杂),我把这道题想成是之前做过的:300. 最长递增子序列 - 力扣(LeetCode),然而实际上这道题目要求的是连续的数值。因为题目不要求位置连续,那么就可以直接想到排序(我把这一块理解错了,导致没有排序去做),接着就是简单的模拟。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/485632
推荐阅读
相关标签
  

闽ICP备14008679号