977.有序数组的平方和
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| def sortedSquares(nums): lst = [] for i in nums: lst.append(i ** 2) return sorted(lst)
def sortedSquares1(nums): n = len(nums) neg = -1 for i ,num in enumerate(nums): if num < 0: neg = i else: break ans = [] i ,j = neg ,neg + 1 while i >= 0 or j < n: if i < 0: ans.append(nums[j] * nums[j]) j += 1 elif j == n: ans.append(nums[i] * nums[i]) i -= 1 elif nums[i] * nums[i] < nums[j] *nums[j]: ans.append(nums[i] * nums[i]) i -= 1 else: ans.append(nums[j] * nums[j]) j += 1 return ans
def sortedSquares2(nums): n = len(nums) ans = [0] * n i ,j , pos = 0 ,n -1 , n - 1 while i <= j: if nums[i] * nums[i] < nums[j] * nums[j]: ans[pos] = nums[j] * nums[j] j -= 1 else: ans[pos] = nums[i] * nums[i] i += 1 pos -= 1 return ans
if __name__ == '__main__': nums = [-7,-3,2,3,11] print(sortedSquares2(nums))
|
35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| def searchInsert(nums,target): left,right = 0,len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] < target: left = mid + 1 elif nums[mid] > target: right = mid - 1 else: return mid return left
def searchInsert1(nums,target): if target in nums: return nums.index(target) else: return False if __name__ == '__main__': nums = [1,3,5,6] print(searchInsert(nums,2))
|