【LeetCode 1991 找到数组的中间位置 / LeetCode 724 寻找数组的中心下标】中间索引问题

news/2024/9/17 19:01:01/ 标签: leetcode, 算法, 职场和发展
1991 题目描述

在这里插入图片描述

暴力解法1:

思路

  1. 遍历下标,求出左边和和右边和
  2. 比较两边是否相等
  3. 相等直接返回值
  4. 没有符合的返回 -1
	class Solution {public int findMiddleIndex(int[] nums) {int len=nums.length;//初始化一个变量 midIndex 为 -1,用于存储中间索引的结果。如果找不到中间索引,则返回 -1。int midIndex=-1;for(int i=0;i<len;i++){/**对于数组中的每个索引 i:初始化两个变量 leftSum 和 rightSum 为 0,分别用于存储当前索引左侧和右侧元素的和。计算左侧元素之和 leftSum: 使用一个从 i 到 0 的倒序循环来累加左侧元素的值。每次循环迭代中,将 nums[j] 加到 leftSum 上。计算右侧元素之和 rightSum:使用一个从 i 到数组末尾的正序循环来累加右侧元素的值。每次循环迭代中,将 nums[k] 加到 rightSum 上。如果 leftSum 等于 rightSum,则找到了中间索引,返回当前索引 i 并设置 midIndex 为 i。*/int leftSum=0,rightSum=0;for(int j=i;j>=0;j--)leftSum+=nums[j];for(int k=i;k<len;k++)rightSum+=nums[k];if(leftSum==rightSum)return midIndex=i;}return midIndex;}}

时间复杂度
这段代码的时间复杂度为 O(n^2),其中 n 是数组 nums 的长度。这是因为在最坏的情况下,需要对每个索引 i 都重新计算左侧和右侧元素的和,每个计算的时间复杂度为 O(n)。
空间复杂度:
该方法的空间复杂度为常数:复杂度为O(1),因为它使用的额外空间不随输入数组的大小变化。所有的变量都占用固定的空间,无论数组有多长,这些变量占用的空间大小都是相同的。

暴力解法2:

思路
根据题目描述可以总结以下规律:

  1. SUM(midIndx左边所有元素的值)等于SUM(midIndx右边所有元素的值)
  2. SUM(所有元素的值) = SUM(midIndx左边所有元素的值)+SUM(midIndx右边所有元素的值)+ midIndex的值
  3. midIndex的值 = SUM(所有元素的值)-(SUM(midIndx左边所有元素的值)+SUM(midIndx右边所有元素的值))
  4. midIndex的值 = SUM(所有元素的值)- 2*SUM(midIndx左边所有元素的值)或者
  5. midIndex的值 = SUM(所有元素的值)- 2*SUM(midIndx右边所有元素的值)

具体到代码中如下:

class Solution {public int findMiddleIndex(int[] nums) {int sum = Arrays.stream(nums).sum();int left = 0;int len = nums.length;if(len==1){return 0;}for (int i = 0; i < nums.length; ++i) {if (2*left +nums[i]== sum) {return i;}left +=nums[i];}return -1;}
}

本题对应链接:https://leetcode.cn/problems/find-the-middle-index-in-array/description/

724 题目描述 :

在这里插入图片描述

暴力解法3:

思路
根据题目描述可以总结以下规律:

  1. SUM(midIndx左边所有元素的值)等于SUM(midIndx右边所有元素的值)
  2. 如果 SUM(所有元素的值)-midIndex的值 = SUM(midIndx左边所有元素的值)则midIndex找到了
  3. 如果 SUM(所有元素的值)-midIndex的值 > SUM(midIndx左边所有元素的值),则需要继续推进midIndex的下标

具体代码如下:

class Solution {public int findMiddleIndex(int[] nums) {int sum = Arrays.stream(nums).sum();int left = 0;int right = sum;for (int i = 0; i < nums.length; i++) {right -= nums[i];if (left == right) {return i;}left +=nums[i];}return -1;}
}

本题对应链接:https://leetcode.cn/problems/find-pivot-index/description/


http://www.ppmy.cn/news/1507315.html

相关文章

学单片机怎么在3-5个月内找到工作?

每个初学者&#xff0c;都如履薄冰&#xff0c;10几年前&#xff0c;我自学单片机时&#xff0c;也一样。 想通过学习&#xff0c;找一份体面点的工作&#xff0c;又害怕辛辛苦苦学出来&#xff0c;找不到工作。 好在&#xff0c;当初执行力&#xff0c;还算可以&#xff0c;自…

Docker快速入门指南

&#x1f6e0;️ Docker 应用场景 Docker 是一个开源的平台&#xff0c;旨在简化应用程序的开发、部署和管理。它通过容器技术&#xff0c;将应用及其所有依赖打包在一个标准化的环境中&#xff0c;从而确保应用在不同环境中的一致性和可移植性。在 Python 爬虫的场景中&#…

【云原生】听说大家跟着学haproxy,都成大佬了(实验篇)

PS&#xff1a;想了解haproxy理论知识&#xff0c;请移步haproxy理论篇 一、实验环境 主机名角色IP地址haproxy172.25.254.100web1RS1172.25.254.10web2RS2172.25.254.20client客户机172.25.254.254 二、haproxy的基本部署 1、安装nginx服务&#xff08;web1、web2&#xf…

PHP MySQL 读取数据

PHP MySQL 读取数据 PHP和MySQL是Web开发中的经典组合,广泛用于创建动态网站和应用程序。在PHP中读取MySQL数据库中的数据是一项基本技能,涉及到连接数据库、执行查询以及处理结果集。本文将详细介绍如何使用PHP从MySQL数据库中读取数据。 1. 环境准备 在开始之前,请确保…

虚拟机centos9搭建wordpress

目录 安装环境和搭建简介 1. 更换yum源更新系统软件包&#xff1a; 1.1备份yum源 1.1.1创建备份目录&#xff1a; 1.1.2移动现有仓库配置文件到备份目录&#xff1a; 1.1.3验证备份&#xff1a; 1.2更换yum源 1.2.1添加yum源 1.2.2删除和建立yum缓存 1.3更新系统软件…

《深入浅出WPF》学习笔记七.使用Prism实现点单系统

《深入浅出WPF》学习笔记七.使用Prism实现Mvvm点单系统 背景 深入浅出Wpf系列视频的最后一个demo,使用Prism、Mvvm实现点单系统。demo并不复杂&#xff0c;但是涉及的面广&#xff0c;方便更好的理解wpf。代码在下面自取。后续会把git地址补充上来。 代码 项目层级 command …

Multisim 用LM358 运放模拟线性稳压器 - 运放输出饱和 - 前馈电容

就是拿运放搭一个可调的LDO 稳压器&#xff0c;类似下面这个功能框图里的感觉。本来应该非常简单&#xff0c;没什么好说的&#xff0c;没想到遇到了两个问题。 原理 - 理想运放 我用PNP 三极管Q2 作为输出&#xff0c;运放输出电压升高时&#xff0c;流过PNP 三极管BE 的电流变…

云服务器部署Java+Vue前后端分离项目

1、申请一个云服务器 选择云服务器&#xff1a;阿里云、腾讯云、百度云、京东云、华为云等等&#xff0c;我使用的是阿里云服务器。 2、远程链接服务器 使用FinalShell工具或者其他远程工具&#xff0c;使用SSH链接&#xff0c;主机地址要填写阿里云服务的公网ip&#xff0c;如…

Redis的String类型常用命令总结

1. set 设置一个键的值。 set key value示例&#xff1a; set username "alice"2. get 获取一个键的值。 get key示例&#xff1a; get username3. getset 设置键的值&#xff0c;并返回键的旧值。 getset key value示例&#xff1a; getset username "…

for(char c:s),std::vector<int> numbers 和std::int numbers[],.size()和.sizeof()区别

在C中当需要对某个容器或数组进行遍历时我们可以使用以下语句&#xff0c;c将会被赋值为s中的元素 for(char c:s)://s可以是任何满足条件的容器或数组for(int c:s):for(double c:s):for(float c:s):在C中我们来区分std::vector numbers {1, 2, 3, 4, 5};和std::int numbers[] …

常见8种数据结构

常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图&#xff0c;每种数据结构都有其特点&#xff0c;如下&#xff1a; 常见数据结构 1.数组2.链表3.队列4.栈5.树6.图7.哈希表8.堆 1.数组 特点&#xff1a; 固定大小的线性数据结构支持快速随机访问插入和删除效率…

徐州BGP机房与普通机房的区别有哪些?

BGP也被称为是边界网关协议&#xff0c;是运行在TCP上的一种自治系统的路由协议&#xff0c;能够用来处理因特网大小的网络协议&#xff0c;同时也是能够处理好不相关路由域之间的多路连接的协议&#xff0c;今天小编主要来聊一聊徐州BGP机房与普通机房之间的区别有哪些&#x…

5分钟上手亚马逊云科技AWS核心云开发/云架构知识 - 维护EC2服务器

简介&#xff1a; 小李哥从今天开始将开启全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家0基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构。 我将每天介绍一个基于亚马逊云…

【xilinx】Vitis 2021.1 安装在 Ubuntu 20.04 上挂起

描述 受影响的设备和配置&#xff1a; 所有 I/Q/M/E 温度等级的 Versal GTM。当前或未来的 38 Gb/s 及以上的 PAM4 配置。所有线路速率低于 38 Gb/s 或 NRZ 的 PAM4 配置不受影响。 当 GTM 收发器当前未使用但已配置时&#xff0c;在某些操作条件下&#xff08;参见表 1&#x…

C++之类与对象(完结撒花篇)

目录 前言 1.再探构造函数 2.类型转换 3.static成员 4. 友元 5.内部类 6.匿名对象 7.对象拷贝时的编译器优化 结束语 前言 在前面的博客中&#xff0c;我们对类的默认成员函数都有了一定了解&#xff0c;同时实现了一个日期类对所学的没内容进行扩展延伸&#xff0c;本…

【C++ 面试 - 基础题】每日 3 题(十一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…

【HarmonyOS NEXT星河版开发学习】小型测试案例06-小红书卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;自适应伸缩是指应用程序能够根据不同设备的屏幕尺寸、分辨率和形态&…

Leetcode每日刷题之 11. 盛最多水的容器(C++)

1. 题目解析 根据题目我们知道本题我们需要由给出的数组找出所有容器中盛水最多的一个&#xff0c;即核心就是先求出所有容器后遍历找出最大的即可 2. 算法原理 本题使用到的算法是双指针&#xff0c;在使用暴力解法遍历所有容器的时候会出现超时的问题&#xff0c;而是用双指针…

【机器学习数据预处理】特征工程

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…