Non-decreasing Array

    这道题为简单题,但是做的过程中忽略了一些特殊情况,最后还是做出来了,怪说不得这道题的通过率才21%左右

  题目:

    

  思路:

    我设置了两个变量,prev代表上一个元素,prev_prev代表上上个元素,代码的大致思路就是如果有两次(因为我把两个值设置为无穷小,所以第一次num就是自动加1,但是这一次不算)该元素比上一个prev小,那么就返回False,否则True,在这个过程中最难的就是第一次出现的时候如何改变prev和prev_prev的值。如果上上个元素小于i,那么就把上个和上上个元素都变为i,prev_prev == float(‘Inf’) 这个条件是由于当时没考虑到长度小于3时才加的,其他情况就把上个和上上个元素都变为i元素的上个元素值

 

  代码:

class Solution(object):
    def checkPossibility(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        prev_prev = float('inf')
        prev = float('inf')
        num = 0
        for i in nums:
            if i < prev: 
                num += 1
                if num == 1: prev = i
            else: 
                prev_prev = prev
                prev = i
            if num == 2: 
                if prev_prev == float('inf') or prev_prev <= i: 
                    prev_prev = i
                    prev = i
                else: 
                    prev_prev = prev
            if num == 3:
                return False
        return True

 

    

posted @ 2017-09-17 22:58  唐僧洗发爱飘柔  阅读(123)  评论(0)    收藏  举报