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

LeetCode(977):有序数组的平方

有序数组的平方

题目链接

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

//暴力 
#include<stdio.h>
void sort(int *nums,int n){
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++){
			if(nums[i]>nums[j]){
				int temp=nums[i];
				nums[i]=nums[j];
				nums[j]=temp;
			}
		}
}

int main(){
	int nums[]={-4,-1,0,3,10};
	int n=sizeof(nums)/sizeof(nums[0]);
	for(int i=0;i<n;i++)
		nums[i]=nums[i]*nums[i];
	sort(nums,n);
	for(int i=0;i<n;i++)
		printf("%d ",nums[i]);
} 

聪明方法:双指针

数组其实是有序的,只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不可能是中间。此时可以考虑双指针,分别指向头和尾。

并且此题没规定空间复杂度,故可以新建一个数组。

//双指针
//学会这个思想的变化
#include<stdio.h>
int main(){
	int nums[]={-11,-2,3,4,5,6,7};
	int n=sizeof(nums)/sizeof(nums[0]);
	int result[n];//构建一个新数组
	int k=n-1;//作为新数组的索引
	//***由于原数组两边的平方比中间大,并且大的要在新数组后面,故初始值为n-1 
	for(int i=0,j=n-1;i<=j;){ //定义两个指向头和尾的索引;注意:i<=j,因为最后还有一个元素要加进去 
		if(nums[i]*nums[i]<nums[j]*nums[j]){
			result[k--]=nums[j]*nums[j];
			j--;
		} 
		else{
			result[k--]=nums[i]*nums[i];
			i++;
		}
	}
	for(int i=0;i<n;i++)
		printf("%d ",result[i]);
} 

http://www.dtcms.com/a/89444.html

相关文章:

  • 图片类型转换
  • 使用 Python包管理工具 uv 完成 Open WebUI 的安装
  • 【Ubuntu设备端口绑定】
  • 电机控制常见面面试问题(十九)
  • 单链表结点删除
  • PostgreSQL:索引与查询优化
  • 蓝桥杯 整数变换
  • 深入理解 Git Stash:功能、用法与实战示例
  • 第一次程序Hello Python
  • 【数据结构】C语言实现树和森林的遍历
  • WPF x:Static与StaticResource
  • 基于 Hydrus 软件的土壤水、热、盐及污染物迁移模型与案例分析
  • [图形学]在半球面上按照微表面模型采样
  • 《深入探索 C++对象模型》-- 对象实例直接访问成员 VS 通过指针或引用访问成员 P99扩展解释
  • 科技赋能|ZGIS综合管网智能管理平台守护地下城市生命线
  • Nginx目录结构
  • Mininet--moduledeps.py源码解析
  • 为何服务器监听异常?
  • Next Route Handlers的使用
  • 树莓派开发(一):烧录系统,设置SSH远程登录,用摄像头拍照
  • Nginx反向代理及负载均衡
  • 精选10个好用的WordPress免费主题
  • 代码随想录第55期训练营第十一天|LeetCode150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素
  • 【日常笔记 1】 有关异常学习笔记
  • 《破解老龄化的智能密钥:机器人四维战略与未来养老生态》
  • 魔法测试:用本地多模态大模型(Qwen2.5-VL)将PDF转为Markdown文档
  • 大文件分片上传及断点续传实现
  • AI胡思乱想系列——大模型被当成了X度
  • 【Git Log 指南:提交历史的有效管理与分析】
  • 力扣刷题39. 组合总和