Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e35c827

Browse files
committed
Update array.md
有序数组
1 parent 704d9b3 commit e35c827

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

‎data_structure/array.md‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,62 @@ class Solution:
9393
return nums
9494
```
9595

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+
96152

97153
### [spiral-matrix](https://leetcode-cn.com/problems/spiral-matrix/)
98154

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /