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

最短无序连续子数组

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;
    }
};
全部评论

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务