[LeetCode][Python]977. 有序數(shù)組的平方

給定一個按非遞減順序排序的整數(shù)數(shù)組 A,返回每個數(shù)字的平方組成的新數(shù)組,要求也按非遞減順序排序。

示例 1:

輸入:[-4,-1,0,3,10]
輸出:[0,1,9,16,100]
示例 2:

輸入:[-7,-3,2,3,11]
輸出:[4,9,9,49,121]

提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非遞減順序排序。

一開始也是沒有什么思路,連排序都沒想到,后來參考了一下專家的解法,豁然開朗

方法一:排序
思路與算法

創(chuàng)建一個新的數(shù)組,它每個元素是給定數(shù)組對應(yīng)位置元素的平方,然后排序這個數(shù)組。這對于Python比較方便,它有自帶的sort方法

方法二:雙指針
思路
因為數(shù)組 A 已經(jīng)排好序了, 所以可以說數(shù)組中的負(fù)數(shù)已經(jīng)按照平方值降序排好了,數(shù)組中的非負(fù)數(shù)已經(jīng)按照平方值升序排好了。

算法

首先,確定正值和負(fù)值臨界點,然后正值部分向尾部走,負(fù)值部分向頭部走。接下來就是比較數(shù)字平方的大小,依次放入一個空列表

class Solution:
    def sortedSquares(self, A: List[int]) -> List[int]:
        N = len(A)
        j = 0
        # determin negative and positive part
        while (j < N) and (A[j] < 0):
            j+=1
        i = j-1
        ans = []
        while (i>=0 and j < N):
            if(A[i]**2 < A[j]**2):
                ans.append(A[i]**2)
                i -= 1
            else:
                ans.append(A[j]**2)
                j += 1
        
        while i >= 0:
            ans.append(A[i]**2)
            i -= 1
            
        while j<N:
            ans.append(A[j]**2)
            j += 1
        return ans
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容