【C语言】每日一题(寻找数组的中心下标)

寻找数组的中心下标,链接奉上

方法

  • 暴力循环
  • 前缀和

在这里插入图片描述

暴力循环

​​​​​​​思路:

依旧是我们的老朋友,暴力循环。
1.可以利用外层for循环,循环变量为数组下标,在循环内分别求出下标左边与右边的sum
2.在边界时讨论,
当下标为左边界(nums[0])时,left sum=0;当下标为右边界(nums[numsSize-1)时,right sum=0
3.讨论完特殊情况后,进行左边与右边的比较;
左==右时,即代表我们找到了下标;
否则返回-1。

代码实现:

int pivotIndex(int* nums, int numsSize)
{for(int i=0;i<numsSize;i++)//外层for循环{int Lsum=0;//left sum的缩写。//在循环内部放置是因为防止这次的lsum加上上次的lsum,造成计算错误。if(i==0)//特殊情况,左边界Lsum=0;elsefor(int j=0;j<i;j++)//求lsum的值Lsum+=nums[j];int Rsum=0;if(i==numsSize-1)Rsum=0;elsefor(int j=i+1;j<numsSize;j++)Rsum+=nums[j];if(Lsum==Rsum)return i;}return -1;
}

但是,此种方法的时间复杂度巨大无比,我们可以进行改进

我们发现,每次进入for循环内时,总是会有重复的计算出现,比如:
计算i=0时的Rsum(ringt sum缩写),每次都重新计算了一遍,但是我们可以在上一次的基础上进行减nums[i],大大降低了计算量。

代码实现:

int pivotIndex(int* nums, int numsSize)
{int i=0;int j=0;int Lsum=0;int Rsum=0;for(i=0;i<numsSize;i++)//首先计算出Rsum的值,i=0时{Rsum+=nums[i];}for(i=0;i<numsSize;i++){if(i==0)Lsum=0;elseLsum+=nums[i-1];//上一次的基础上加上nums[i-1]if(i==numsSize-1)Rsum=0;elseRsum-=nums[i];//上一次的基础上减上nums[i]if(Lsum==Rsum)return i;}return -1;
}

但是这样每次进循环都会判断一次是否在边界处
则可以在外部进行判断

int pivotIndex(int* nums, int numsSize)
{int i=0;int j=0;int Lsum=0;int Rsum=0;for(i=1;i<numsSize;i++)Rsum+=nums[i];if(Lsum==Rsum)return 0;for(i=1;i<numsSize;i++){Lsum+=nums[i-1];Rsum-=nums[i];if(Lsum==Rsum)return i;}return -1;
}

前缀和

思路:

当找到下标时,意味着左右元素和相等。
设数组和为total,则total==Rsum+Lsum+nums[i]
又因左右相等,故total==2Rsum+nums[i]

代码实现:

int pivotIndex(int* nums, int numsSize)
{int total=0;int Rsum=0;for(int i=0;i<numsSize;i++){total+=nums[i];}for(int i=0;i<numsSize;i++){if(Rsum*2+nums[i]==total)return i;Rsum+=nums[i];}return -1;
}

欢迎讨论哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/67856.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 NLP 进行文本摘要

一、说明 文本摘要是为较长的文本文档生成简短、流畅且最重要的是准确摘要的过程。自动文本摘要背后的主要思想是能够从整个集合中找到最重要信息的一小部分&#xff0c;并以人类可读的格式呈现。随着在线文本数据的增长&#xff0c;自动文本摘要方法可能会非常有用&#xff0c…

ubuntu环境上搭建ros2

环境搭建 设置系统区域。 首先需要确保安装环境支持 UTF-8 格式 sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 locale添加 ROS2 的代码仓库 设置你的sources.list&#xff0…

Python自动化小技巧16——分类汇总写入excel不同sheet表

案例背景 上了两个月班的社畜博主最近终于有空来总结一下最近写的代码了。 因为上班都是文职工作&#xff0c;天天不是word就是excel就是PPT和pdf....这和什么机器学习还有数据科学不一样&#xff0c;任务更多的是处理实在的文字和表格等格式&#xff0c;按照领导要求来完成&…

wsl2安装docker引擎(Install Docker Engine on Debian)

安装 1.卸载旧版本 在安装 Docker 引擎之前&#xff0c;您必须首先确保卸载任何冲突的软件包。 发行版维护者在他们的存储库。必须先卸载这些软件包&#xff0c;然后才能安装 Docker 引擎的正式版本。 要卸载的非官方软件包是&#xff1a; docker.iodocker-composedocker-…

使用GUI Guider工具开发嵌入式GUI应用 (3) - 使用label组件

使用GUI Guider工具开发嵌入式GUI应用 (3) - 使用label组件 文章目录 使用GUI Guider工具开发嵌入式GUI应用 (3) - 使用label组件引言在GUI Guider工程中创建label组件编译MCU工程并下载到开发板 引言 本节讲述在GUI Guider中&#xff0c;应用各种UI的基本元素&#xff0c;并顺…

企业中商业智能BI,常见的工具和技术

商业智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据&#xff0c;从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…

c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

单片机一般采用中断方式接受数据&#xff0c;这样便于及时处理 #include "reg51.h" #include "myheader.h" #define uchar unsigned char int szc[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int bufferc[6]{0}; int sza[6]{0x01,0x02,0x0…

Redis_缓存1_缓存类型

14.redis缓存 14.1简介 穿透型缓存&#xff1a; 缓存与后端数据交互在一起&#xff0c;对服务端的调用隐藏细节。如果从缓存中可以读到数据&#xff0c;就直接返回&#xff0c;如果读不到&#xff0c;就到数据库中去读取&#xff0c;从数据库中读到数据&#xff0c;也是先更…

二次封装element-plus上传组件,提供校验、回显等功能

二次封装element-plus上传组件 0 相关介绍1 效果展示2 组件主体3 视频组件4 Demo 0 相关介绍 基于element-plus框架&#xff0c;视频播放器使用西瓜视频播放器组件 相关能力 提供图片、音频、视频的预览功能提供是否为空、文件类型、文件大小、文件数量、图片宽高校验提供图片…

实录分享 | 使用Prometheus和Grafana监控Alluxio运行状况

欢迎来到【微直播间】&#xff0c;2min纵览大咖观点 本次分享主要包括三个方面&#xff1a; Prometheus&Grafana简介环境搭建手动调优 一、 Prometheus&Grafana简介关于Prometheus&#xff1a; Prometheus 是一个开源的完整监控解决方案&#xff0c;其对传统监控系…

js操作剪贴板讲解

文章目录 复制&#xff08;剪切&#xff09;到剪贴板Document.execCommand()Clipboard复制Clipboard.writeText()Clipboard.write() copy&#xff0c;cut事件 从剪贴板进行粘贴document.execCommand(paste)Clipboard粘贴Clipboard.readText()Clipboard.read() paste 事件 安全性…

领航未来!探索开源无人机与5G组网的前沿技术

近年来无人机行业高速发展&#xff0c;无人机被广泛应用于航拍、农业、电力、消防、科研等领域。随着无人机市场不断增长&#xff0c;其对实时超高清图传、远程低时延控制、海量数据处理等需求也在不断扩张&#xff0c;这无疑给通信链路带来了巨大的挑战。 为应对未来的需求变…