有序数组的平方

leetcode :977 题

需求:

给定一个有序数组,返回数组所有元素平方之后的结果,要求平方后的数组依然有序。

注意:数组是有负数的。例:[-5,1,2,3]

暴力解法:先平方,后使用排序算法排序。

双指针思路:

根据数组可以看出 <- [-5,1,2,3] -> , 平方后的数组的大小是从两边往中间逐渐缩小的。所以思路如下:

1.定义最左,最右两个指针,和一个新数组。

2.通过判断左右两个指针指向的值 谁最大,将最大的值存入新数组(从数组尾部开始存放,因为是升序)。

3.移动前一个最大值的指针(往中间),继续比较。直到将所有元素都存放到新数组。

C#:

public class Solution {
    public int[] SortedSquares(int[] nums) {
        var result = new int[nums.Length];
        int k=nums.Length -1 ;
        for (int i=0,j=k;i<=j;)
        {
            if((nums[i] * nums[i]) > (nums[j] * nums[j]))
            {
                result[k--] = nums[i] * nums[i++];
            }
            else 
            {
                result[k--] = nums[j] * nums[j--];
            }
        }
        return result;
    }
}

rust:

impl Solution {
    pub fn sorted_squares(nums: Vec<i32>) -> Vec<i32> {
        let mut result = nums.clone();
        let mut k = result.len() -1 ;
        let mut i = 0;
        let mut j = nums.len() -1;
        while i <= j
        {
            if (nums[j] *nums[j]) > (nums[i] * nums[i]) 
            {
                result[k] = nums[j] * nums[j];
                j-=1;
                k-=1;
            }
            else 
            {
                result[k] = nums[i] *nums[i];
                i+=1;
                k-=1;
            }
        }
        result
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值