LeetCode 977. 有序数组的平方

导读:本篇文章讲解 LeetCode 977. 有序数组的平方,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

题目描述: 给你一个按 非递减顺序 排序的整数数组 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]
来源: 力扣(LeetCode)
链接: https://leetcode-cn.com/problems/squares-of-a-sorted-array/
解决方案:
方法1:暴力破解法,数组中的每个元素平方之后,直接调用库函数sort对数组排序,时间复杂度为O(N+logN).

	 // 法一:暴力破解法
	 public static int[] sortedSquares(int[] nums) {
		 for (int i = 0; i < nums.length; i++) {
			 nums[i] = nums[i] * nums[i];
		 }
		 Arrays.sort(nums, 0, nums.length);
		 return nums;
	 }

方法2:双指针法,首先,重新创建一个新的数组int][] result = new int[nums.length],并设置一个游标初始为int k = nums.length - 1result用来存放原来数组元素平方后的排序结果; 之后, 再设置两个指针 i, j,分别从下标0和下标nums.length-1开始对比nums[i] * nums[i]nums[j] * nums[j]的大小,如果nums[i] * nums[i] < nums[j] * nums[j], 则 result[k--] = nums[j] * nums[j],否则的话 result[k--] = nums[j] * nums[j],最后的时间复杂度为O(N).

    // 法二:双指针法
	public static int[] sortedSquares(int[] nums) {
		int i = 0, j = nums.length - 1, k = nums.length - 1;
		int[] result = new int[nums.length];
		while (i <= j) {
			if (nums[i] * nums[i] < nums[j] * nums[j]) {
				result[k--] = nums[j] * nums[j];
				j--;
			} else if (nums[i] * nums[i] >= nums[j] * nums[j]) {
				result[k--] = nums[i] * nums[i];
				i++;
			}
		}
		return result;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5243.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!