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

最短无序连续子数组

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

提供个思路,不知道该叫啥算法。(贪心?)
找出从0开始的最长有效有序序列(以n-1为终点的同理):
第一,比较相邻的数字,第一次出现nums[i]>nums[i+1]时,标记flag=1,并记录下指标i
第二,找出nums[i:]之中的最小值min
第三,如果flag=0,即没有遇到逆序,直接返回零;如果flag=1,则需要回溯nums[:i],找到第一个小于min的值的指标ind1,这个指标ind1就是从0开始的最长有效有序序列的终点了,同理找出ind2(以n-1为终点的最长有效有序序列),然后返回 ind2-ind1-1

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#

# @param nums int整型一维数组 
# @return int整型
#
class Solution:
    def findUnsortedSubarray(self , nums: List[int]) -> int:
        # write code here
        ind1,flag1,ind2,flag2,len0=0,0,0,0,len(nums)
        for i in range(len0):
            if not flag1 and i<len0-1 and nums[i]>nums[i+1]:
                ind1,flag1,min1=i,1,nums[i+1]
            elif flag1:
                min1=min(min1,nums[i])
            if not flag2 and i<len0-1 and nums[len0-1-i]<nums[len0-2-i]:
                ind2,flag2,max2=len0-1-i,1,nums[len0-2-i]
            elif flag2:
                max2=max(max2,nums[len0-1-i])
        if not flag1:
            return 0
        while ind1>=0:
            if nums[ind1]<=min1:
                break
            else:
                ind1+=-1
        while ind2<=len0-1:
            if nums[ind2]>=max2:
                break
            else:
                ind2+=1
        return ind2-ind1-1



全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
弦五Strings:他之所以会举报你代课是因为在这种人眼里正常上课就是正义代课就是邪恶,典型二极管思维,处理方法就是私下沟通,你就说你自己家里经济困难或者家里父母生病什么之类的,需要去打工挣钱,用尽孝的正义对冲他认为的上课的正义,他可能就妥协了。
我的实习日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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