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

有序数组的平方

时间:2024-05-23 23:40:17浏览次数:22  
标签:mut 平方 数组 nums int result 有序

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
    }
}

标签:mut,平方,数组,nums,int,result,有序
From: https://www.cnblogs.com/ChuanC/p/18209639

相关文章

  • 卡尔的算法训练营day2,数组2
    第一题做错了,还是边界值的问题。忘记存草稿了。题号997publicstaticintfindJudge(intn,int[][]trust){int[]judgeCandidate=newint[n+1];int[]othersCandidate=newint[n+1];for(inti=0;i<trust.length;i++){//二维数组......
  • 2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中
    2024-05-22:用go语言,你有一个包含n个整数的数组nums。每个数组的代价是指该数组中的第一个元素的值。你的目标是将这个数组划分为三个连续且互不重叠的子数组。然后,计算这三个子数组的代价之和,要求返回这个和的最小值。输入:nums=[1,2,3,12]。输出:6。答案2024-05-22:cha......
  • 曲线方式观察double数组
    支持功能查看折线使能查看点标记使能数据保存到文件支持数据类型double[]/float[]/int[]最常见List/List/List比较常见double[][]xy组依次排列double[][]多个y组依赖DynamicDataDisplay库使用(VisualStudio2019)dll及相关文件放入文件夹C:\Users\x......
  • PHP函数 向数组插入元素
    <?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';//PHP向数组插入元素/***1、使用array_unshift()函数,向数组头插入新元素;*2、使用array_push()函......
  • 二进制数组与基础类型转换
    ///<summary>///工具类:对象与二进制流间的转换///</summary>classByteConvertHelper{///<summary>///将对象转换为byte数组///</summary>///<paramname="obj">被转换对象</param>///......
  • 在 JavaScript 中递归展开数组
    对嵌套数组使用递归:递归是处理嵌套数组的干净而有效的方法。它允许您处理任意深度的数组。使用该Array.isArray方法检查数组:这有助于确保代码适用于不同的数据类型并且更加健壮。 潜在性能问题:对大型数组要小心:处理非常深或很大的数组时,递归函数可能会导致堆栈溢出错误。在这......
  • NumPy 数组排序、过滤与随机数生成详解
    NumPy数组排序排序数组排序数组意味着将元素按特定顺序排列。顺序可以是数字大小、字母顺序、升序或降序等。NumPy的ndarray对象提供了一个名为sort()的函数,用于对数组进行排序。示例:importnumpyasnparr=np.array([3,2,0,1])print(np.sort(arr))输出:[0......
  • 指针数组练习排列字符串
    用指针数组实现排列字符串#include<stdio.h>#include<math.h>#include<string.h>#defineN5voidOrderString(char*p[],intn);intmain(){char*arr[10]={"Hello","Howareyou?","I'mfine","Ilovecomputer......
  • 152- Maximum Produce Subarray-最大子数组之乘积
    问题描述Givenanintegerarray nums,finda subarray.thathasthelargestproduct,andreturn theproduct.Thetestcasesaregeneratedsothattheanswerwillfitina 32-bit integer.解释:找出一个数组中乘积最大的子数组,返回子数组的乘积。案例:Input......
  • 实验4 C语言数组应用编程
    task1.1voidtest1(){inta[N]={1,9,8,4};inti;//输出数组a占用的内存字节数printf("sizeof(a)=%d\n",sizeof(a));//输出int类型数组a中每个元素的地址、值for(i=0;i<N;++i)printf("%p:%d\n",&a[i],a[i......