leecode 题目977 有序数组的平方(python)
2022/2/9 17:17:29
本文主要是介绍leecode 题目977 有序数组的平方(python),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
咱就是说很简单的题目还是要写很久呢
给你一个按 非递减顺序 排序的整数数组 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]
class Solution: def sortedSquares(self, nums: List[int]) -> List[int]: length = len(nums) if length < 1: return nums elif nums[0] >= 0: nums = [i*i for i in nums] return nums elif nums[-1] <= 0: nums = [i*i for i in nums] return nums[::-1] new_nums = [] l = 0 max_position = 0 while(l<length): number = nums[l]*nums[l] if (nums[l] < 0): new_nums.insert(0,number) elif (nums[l] == 0): new_nums.insert(0,0) else: temp_len = len(new_nums) for t in range(max_position,temp_len): if new_nums[t] >= number: new_nums.insert(t,number) max_position = t break if new_nums[-1] < number: new_nums.append(number) l += 1 ''' while(l<length and nums[l] < 0): new_nums.insert(0,nums[l]*nums[l]) l += 1 while (l<length and nums[l] == 0): new_nums.insert(0,0) l += 1 max_position = 0 while(l<length and nums[l] > 0): if new_nums == []: new_nums = [i*i for i in nums] break number = nums[l]*nums[l] temp_len = len(new_nums) for t in range(max_position,temp_len): if new_nums[t] >= number: new_nums.insert(t,number) max_position = t break if new_nums[-1] < number: new_nums.append(number) l += 1 ''' return new_nums
这个是和同学讨论之后写的新方法
先使用二分法找到正负的交界点
从交界点向前向后用双指针搜索下一个插入的最小平方数
class Solution: def sortedSquares(self, nums: List[int]) -> List[int]: length = len(nums) new_nums = [] if length < 1: return nums elif nums[0] >= 0: nums = [i*i for i in nums] return nums elif nums[-1] <= 0: nums = [i*i for i in nums] return nums[::-1] start,end = 0,length-1 i1 = int(length/2) while(end - start > 1): if nums[i1] >= 0: end = i1 else: start = i1 i1 = int((end+start)/2) start_num = nums[start]*nums[start] end_num = nums[end]*nums[end] for i in range(length): if (start_num <= end_num): new_nums.append(start_num) start = start - 1 if start >= 0: start_num = nums[start]*nums[start] else: start_num = 9999999999999999 else: new_nums.append(end_num) end = end + 1 if end < length: end_num = nums[end]*nums[end] else: end_num = 9999999999999999 return new_nums
测试结果:
执行用时: 52 ms
在所有 Python3 提交中击败了84.97% 的用户
内存消耗:16.6 MB
在所有 Python3 提交中击败了11.96% 的用户
通过测试用例: 137 / 137
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
这篇关于leecode 题目977 有序数组的平方(python)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门