赞
踩
题目: 977.有序数组的平方
文档: 代码随想录——有序数组的平方
编程语言: C++
解题状态: 完成,暴力解题
最简单的思路就是平方以后排序,其中平方的过程的时间复杂度为 O ( n ) O(n) O(n),整体的时间复杂度基本上取决于排序的时间复杂度。
其次还可以考虑双指针法。
这里我使用的排序法为时间复杂度 O ( n 2 ) O(n^2) O(n2)的选择排序法。
class Solution { public: vector<int> sortedSquares(vector<int>& nums) { for (int i = 0; i < nums.size(); i++) { nums[i] = nums[i] * nums[i]; } // 选择排序 for (int i = 0; i < nums.size(); i++) { int minIndex = i; for (int j = i; j < nums.size(); j++) { if (nums[j] < nums[minIndex]) minIndex = j; } swap(nums[i], nums[minIndex]); } return nums; } };
数组其实是有序的, 只不过负数平方之后可能成为最大数了。
那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
class Solution { public: vector<int> sortedSquares(vector<int>& nums) { int k = nums.size() - 1; vector<int> result(nums.size(), 0); for (int i = 0, j = nums.size() - 1; i <= j;) { if (nums[i] * nums[i] > nums[j] * nums[j]) { result[k--] = nums[i] * nums[i]; i++; } else { result[k--] = nums[j] * nums[j]; j--; } } return result; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。