@@ -93,6 +93,62 @@ class Solution:
93
93
return nums
94
94
```
95
95
96
+ ### [ 有序数组的平方] ( https://leetcode.cn/problems/squares-of-a-sorted-array/ )
97
+ > 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
98
+
99
+ 思路:本题经典的双指针法,但有两种思路,一是从小到大去排列,一种是从大到小逆序排列,但第二种更直接,第一种需要先找到最小值在的位置,而最大值我们是知道的,不是在数组头部就是数组尾部。
100
+
101
+ ** Python版本一**
102
+ ``` python
103
+ class Solution :
104
+ def sortedSquares (self , nums : List[int ]) -> List[int ]:
105
+ pos = 0
106
+ while pos < len (nums) and nums[pos] < 0 : pos += 1
107
+
108
+ neg_nums = nums[0 :pos]
109
+ neg_nums = neg_nums[::- 1 ] # reverse
110
+ pos_nums = nums[pos:len (nums)]
111
+
112
+ res = list ()
113
+ ni, pi = 0 , 0
114
+ while ni < len (neg_nums) or pi < len (pos_nums):
115
+ if ni >= len (neg_nums):
116
+ res.append(pos_nums[pi] * pos_nums[pi])
117
+ pi += 1
118
+ continue
119
+ if pi >= len (pos_nums):
120
+ res.append(neg_nums[ni] * neg_nums[ni])
121
+ ni += 1
122
+ continue
123
+ if abs (neg_nums[ni]) < pos_nums[pi]:
124
+ res.append(neg_nums[ni] * neg_nums[ni])
125
+ ni += 1
126
+ else :
127
+ res.append(pos_nums[pi] * pos_nums[pi])
128
+ pi += 1
129
+ return res
130
+ ```
131
+
132
+ ** Python版本二**
133
+ ``` python
134
+
135
+ class Solution :
136
+ def sortedSquares (self , nums : List[int ]) -> List[int ]:
137
+ res = [0 ] * len (nums)
138
+ i, j, r = 0 , len (nums) - 1 , len (nums) - 1
139
+ while i <= j:
140
+ if nums[i] * nums[i] > nums[j] * nums[j]:
141
+ res[r] = nums[i] * nums[i]
142
+ i = i + 1
143
+ else :
144
+ res[r] = nums[j] * nums[j]
145
+ j = j - 1
146
+ r = r - 1
147
+
148
+ return res
149
+
150
+ ```
151
+
96
152
97
153
### [ spiral-matrix] ( https://leetcode-cn.com/problems/spiral-matrix/ )
98
154
0 commit comments