測試題

  1. 數組中的最長山脈
    解題思路:雙指針。先找到比左右兩側大的數 然後以這個數爲中心 依次找到左右的長度
class Solution(object):
    def longestMountain(self, A):
        """
        :type A: List[int]
        :rtype: int
        """
        if len(A)<3:
            return 0
        res=0
        for i in range(1,len(A)-1):
            
            if A[i-1]<A[i] and A[i+1]<A[i]:
                left,right=i-1,i+1
                while left>0 and A[left-1]<A[left]:
                    left-=1
                while right<len(A)-1 and A[right+1]<A[right]:
                    right+=1
                res=max(res,right-left+1)
        return res
  1. 從x軸的零座標出發,走出的第n步,步長爲n,即第一步移動的距離爲1,第二步移動的距離爲2。每次移動可以向左或向右移動。求最少需要走多少步才能到達target位置(target可以爲負)。若無論怎麼走都達到不了,則輸出-1。

解題思路:
牛客網大佬的思路:target爲正或負,所需要的步數是一樣的。target=abs(target)

1.求sum=1+2+…+k。是sum剛好大於target。diff=sum-target

2.若diff爲偶數,則讓diff/2反向即可,共需要k步到達target。

3.若diff爲奇數,讓任何數反向都是減少偶數距離,不會使得diff爲0。因此讓diff+k+1

4.若diff+k+1爲偶數,則根據1可知k+1步可到達target。

5.若diff+k+1爲奇數,說明k+1爲偶數,則k+2必然爲奇數,因此diff+k+1+k+2必爲偶數,即可以在k+2步時到達。

代碼:

def FindTarget(target):
    target=abs(target)
    i=0
    sum=0
    while sum<target:
        i += 1
        sum+=i
    if sum==target:
        return i
    else:
        diff=sum-target
        if diff%2==0:
            return i
        else:
            if (diff+i+1)%2==0:
                return i+1
            else:
                return i+2
x=input()
print FindTarget(x)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章