当前位置: 首页 > news >正文

【C语言】有序数组的平方

文章目录


给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

#include<stdio.h>

/**
 * @brief 计算一个整数数组的平方,并按非递减顺序存放结果
 * 
 * 该函数接受一个整数数组arr和其长度len,计算每个元素的平方,并将结果按非递减顺序存放在new_arr中。
 * 这个函数假设输入数组arr中的元素已经按非递增顺序排列。
 * 
 * @param arr 输入的整数数组,元素按非递增顺序排列
 * @param len 输入数组的长度
 * @param new_arr 存放结果的数组,长度至少为len
 */
void Array_Square(int arr[], int len, int new_arr[])
{
    // 初始化两个指针j和k,都指向数组的最后一个元素的位置
    int j = len-1;
    int k = len-1;
    
    // 使用两个指针i和j从数组的两端开始,比较平方值并填充new_arr
    for(int i = 0; i<=j;)
    {
        // 如果左端元素的平方小于右端元素的平方,则将较大的平方值放在new_arr的末尾,并移动右指针j
        if(arr[i]*arr[i] < arr[j]*arr[j])
        {
            new_arr[k--] = arr[j]*arr[j];
            j--;
        }
        else
        {
            // 否则,将左端元素的平方放在new_arr的末尾,并移动左指针i
            new_arr[k--] = arr[i]*arr[i];
            i++;
        }
    }
}


int main()
{
    int arr[]={-4,-1,2,3,5};
    int new_arr[] = {0,0,0,0,0,0};
    int len=sizeof(arr)/sizeof(arr[0]);
    Array_Square(arr, len , new_arr);
    for(int i=0; i<len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    for(int i=0; i<len; i++)
    {
        printf("%d ", new_arr[i]);
    }
}

该代码的时间复杂度为O(n),采用双指针的方式,一个指针指向数组的起始位置,一个指针指向数组的末尾,然后逐一比较。

相关文章:

  • 《DeepSeek 一站式工作生活 AI 助手》
  • 外包干了3年,技术退步太明显了。。。。。
  • Rust 语言入门(一):打印与格式化输出
  • Transformer 模型介绍(四)——编码器 Encoder 和解码器 Decoder
  • DeepSeek应用-一秒对书本要点分析并创建思维脑图
  • Java并发编程——AQS原理解析
  • MobaXterm中文版安装使用教程-附安装包
  • 使用 Spring Boot 和 Canal 实现 MySQL 数据库同步
  • 1997-2019年各省进出口总额数据
  • Android 中使用 FFmpeg 进行音视频处理
  • Spring Boot三:Springboot自动装配原理
  • Java中Map循环安全的删除数据的4中方法
  • Qt5开发入门指南:从零开始掌握跨平台开发
  • ZYNQ TCP Server PS端千兆网口速率低问题,要修改BSP中LWIP配置参数
  • 英语---基础词汇库
  • Nginx 负载均衡实战:构建高效稳定的 Web 服务
  • 【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解
  • 腾讯的webUI怎样实现deepseek外部调用 ; 腾讯云通过API怎样调用deepseek
  • 解密全同态加密中的自举(Bootstrapping)
  • 【PCIe 总线及设备入门学习专栏 1.1 -- PCI 设备访问方法】