首页 > 其他分享 >LeetCode 977. 有序数组的平方

LeetCode 977. 有序数组的平方

时间:2023-05-05 16:00:08浏览次数:47  
标签:977 平方 nums -- res int 数组 LeetCode

题目链接 :LeetCode 977. 有序数组的平方

  1. 本题直接暴力求解就是先求出每个元素平方后的值,再对平方后的值进行排序,
  2. 双指针解法
    由于数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
    定义一个新数组res,和nums数组一样的大小,让k指向res数组末尾位置。如果nums[i] * nums[i] < nums[j] * nums[j] 那么res[k--] = nums[j] * nums[j]; 如果nums[i] * nums[i] >= nums[j] * nums[j] 那么res[k--] = nums[i] * nums[i];
    代码如下:
func sortedSquares(nums []int) []int {
    n:=len(nums)
    res:=make([]int,n)
    i,j,k:=0,n-1,n-1
    for i <= j {
        if nums[i] * nums[i] > nums[j] * nums[j]{
            res[k] = nums[i] * nums[i]
            i++
        }else{
            res[k] = nums[j] * nums[j]
            j--
        }
        k--
    }
    return res

}

标签:977,平方,nums,--,res,int,数组,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17374397.html

相关文章

  • LeetCode 27. 移除元素 题解
    题目链接:LeetCode27.移除元素本题大意是要对一个数组进行原地删除数值等于val的元素。双指针算法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。快指针(p指针):寻找新数组的元素,新数组就是不含有目标元素的数组慢指针(q指针):指向更新新数组下标的位置当......
  • LeetCode 704. 二分查找 题解
    本题考查的就是一个基本的整数二分查找问题对于整数二分,有单调性一定可以二分,没有单调性的有时候也可以二分。算法思想(分为两种方法):查找结果是在左边区间的情况区间被划分为[l,mid]和[mid+1,r]1、确定分界点,mid=q[(l+r)/2]2、判断是否满足是:区间变成[l,mid]因此:r=mid否......
  • LeetCode 1049. 最后一块石头的重量 II
    思路任何时刻,某个石头的重量永远都是若干石头加减运算的绝对值如a-b+c合并石头都是减法,但仍可能出现+运算符,如a-(b-c)=a-b+c任何一种合并方法,最后一个石头的重量都可以表示成一种代数形式,如a+b-c+d+e+f-g不是所有的代数形式都可以转换为一种合并方法,如a+b+c因此......
  • [Leetcode] 0697.数组的度
    697.数组的度点击上方标题跳转至leetcode题目描述给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在nums中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例1:输入:nums=[1,2,2,3,1]输......
  • AcWing 754. 平方矩阵 II
    AcWing754.平方矩阵II1.地址https://www.acwing.com/problem/content/756/2.题解#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;//每个元素的值为:各个元素下标相减的绝对值+1intmain(){intmatrix[102][102];intn;......
  • LeetCode 416 分割等和子集
    LeetCode|416.分割等和子集给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解......
  • [Leetcode] 0693. 交替位二进制数
    693.交替位二进制数点击上方标题跳转至leetcode题目描述给定一个正整数,检查它的二进制表示是否总是0、1交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。 示例1:输入:n=5输出:true解释:5的二进制表示是:101示例2:输入:n=7输出:false解释:7的二进制表示......
  • [Leetcode] 0696. 计数二进制子串
    696.计数二进制子串点击上方链接跳转至leetcode题目描述给定一个字符串 s,统计并返回具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是成组连续的。重复出现(不同位置)的子串也要统计它们出现的次数。 示例1:输入:s="00110011"输......
  • [Leetcode] 0674. 最长连续递增序列
    674.最长连续递增序列题目描述给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。连续递增的子序列可以由两个下标l和r(l<r)确定,如果对于每个l<=i<r,都有nums[i]<nums[i+1],那么子序列[nums[l],nums[l+1],...,nums[r-1],nums[......
  • [Leetcode] 0680. 验证回文串 II
    680.验证回文串II点击上方标题跳转至leetcode题目描述给你一个字符串 s,最多可以从中删除一个字符。请你判断s是否能成为回文字符串:如果能,返回true;否则,返回false。 示例1:输入:s="aba"输出:true示例2:输入:s="abca"输出:true解释:你可以删除字符'c'。示......