题解 | #最短无序连续子数组#

最短无序连续子数组

http://www.nowcoder.com/practice/d17f4abd1d114617b51e951027be312e

排序 + 比较

一开始认为只要前后找不符合升序的地方 然后两个下标一减就完事了 提交后尴尬了...又重新想了一下,一个值不在它应该在的地方,说明它必然要重新排序,所以...

  1. 拷贝原数组,排序
  2. 分别从前后找第一个值不等的地方,返回 二者下标之差+1
  3. 注意可能本身不需要排序 直接返回0
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @return int整型
     */

    int findUnsortedSubarray(vector<int>& nums) {
        // write code here
        vector<int>vec(nums);
        sort(vec.begin(), vec.end());
        int l = 0;
        int i;
        for (i = 0; i < nums.size(); i++) {
            if (vec[i] != nums[i]) {
                l = i;
                break;
            }
        }
        if(i == nums.size())return 0;
        int r = 0;
        for (int i = nums.size() - 1; i >= 0; i--) {
            if (vec[i] != nums[i]) {
                r = i;
                break;
            }
        }
        return r - l + 1;
    }
};
全部评论

相关推荐

02-12 00:59
已编辑
哈尔滨工业大学 产品经理
华为 软件开发岗 20.6*16薪 本科
点赞 评论 收藏
分享
小狗吃臭臭:以后用不到你设计的手机了,可惜!
点赞 评论 收藏
分享
2024-12-23 06:50
门头沟学院 Java
给点吧求求了:3点发的帖子,害怕😰
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务