Q238. 除自身以外数组的乘积

news2024/12/25 14:34:42

思路

一开始想到的是按位乘

看了题解,思路是存i左边的乘积和 与 i右边的乘积和

代码一:

需要三次循环,需要额外空间 left和right数组
代码:

 public int[] productExceptSelf(int[] nums) {
            int[] left = new int[nums.length];
            int[] right = new int[nums.length];
            int[] result = new int[nums.length];
            left[0] = nums[0];
            for (int i = 1; i < nums.length; i++) {
                left[i] = left[i-1]*nums[i];
            }
            right[nums.length-1] = nums[nums.length-1];
            for (int i = nums.length-2; i >=0; i--) {
                right[i] = right[i+1]*nums[i];
            }
            // 计算两个特殊值,左边界和右边界,题目说明数组长度大于1
            result[0] = right[1];
            result[nums.length-1] = left[nums.length-2];
            for (int i= 1;i<nums.length-1;i++){
                result[i]= left[i-1] * right[i+1];
            }

            return result;
        }

复杂度
在这里插入图片描述

代码二 不需要额外数组

public int[] productExceptSelf(int[] nums) {
            int[] result = new int[nums.length];
            int right =1;
            result[0] = nums[0];
            //用result 充当之前的left,计算左边的乘积
            for (int i = 1; i < nums.length; i++) {
                result[i] = result[i-1]*nums[i];
            }
//            从右边开始计算真正的result,计算到index=1,index=0单独计算
            for (int i = nums.length-1; i >0 ; i--) {
                result[i] = result[i-1] * right;
                right = right * nums[i];//right一直更新,记录右边的乘积
            }
            result[0] = right;

            return result;
        }
    }

代码三:一次循环

 public int[] productExceptSelf(int[] nums) {
            int[] result = new int[nums.length];
            Arrays.fill(result,1);
            int left = 1;
            int right = 1;
            for (int i = 0; i <nums.length; i++) {
                    result[i] = result[i] * left; //从左到右计算 自己左边的乘积
                    result[nums.length-1-i] = result[nums.length-1-i]* right;//从右到左计算 自己右边的乘积
                    left = left * nums[i]; //记录左边的乘积
                    right = right * nums[nums.length-1-i];//记录右边的乘积
            }
            return result;
        }
    }

主要是下面的循环

result[i] = result[i] * left;
一开始result数组都是赋值1,所以在左右两个指针没有交叉的时候,
result[i] = left
result[nums.length-1-i] = right
left是i左边的乘积(不包括i)
right是i右边的乘积(不包括i)

当左右两个指针交叉以后,
result[i] = result[i] * left;,此时的result[i]则不是1,而是之前计算的一边的值。

这个思路很难想到

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python题解

空间三角形 输入在三维空间的三角形三个顶点A&#xff0c;B&#xff0c;C的坐标&#xff08;x,y,z&#xff09;&#xff0c;计算并输出三角形面积。不考虑不能构成三角形的特殊情况。 格式 输入格式&#xff1a; 依次输入三个顶点A&#xff0c;B&#xff0c;C的坐标&#xff…

CISSP,信息安全圈公认的高含金量证书

在数字化和信息化迅速发展的时代&#xff0c;信息安全的重要性愈发突出。 网络攻击、数据泄露和隐私问题频发&#xff0c;使得企业和组织对信息安全专业人士的需求不断增加。 CISSP&#xff08;Certified Information Systems Security Professional&#xff09;作为信息安全领…

文字描边效果

文字描边效果可以通过text-shadow来实现&#xff0c;也可以通过-webkit-text-stroke来实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

MySQL数据库练习(5)

1.建库建表 # 使用数据库 use mydb16_trigger;# 表格goods create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);# 表格orders create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10…

MYSQL第五次作业

1、触发器 建立两个表:goods(商品表)、orders(订单表) mysql> use mydb16_trigger; Database changed mysql> create table goods-> (-> gid char(8) primary key,-> name varchar(10),-> price decimal(8,2),-> num int-> ); Query O…

MySQL零散拾遗(四)--- 使用聚合函数时需要注意的点点滴滴

聚合函数 聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。 常见的聚合函数&#xff1a;SUM()、MAX()、MIN()、AVG()、COUNT() 对COUNT()聚合函数的更深一层理解 COUNT函数的作用&#xff1a;计算指定字段在查询结果中出现的个数&#xff08;不包含NULL值&#…

C++操作Smgp协议的相关教程

SGIP是中国网通为实现短信业务而制定的一种通信协议&#xff0c;用于在短消息网关&#xff08;SMG&#xff09;和服务提供商&#xff08;SP&#xff09;之间、短消息网关&#xff08;SMG&#xff09;和短消息网关&#xff08;SMG&#xff09;之间通信。 Perl的IO::Async模块提…

SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)

上一章讲了计划运行的5大步骤中的前两步&#xff0c;计算净需求和计算批量大小。 SAP PP学习笔记30 - 计划运行的步骤1 - Net requirements calculation 计算净需求(主要讲了安全库存要素)&#xff0c;Lot-size calculation 计算批量大小-CSDN博客 本章继续讲计划运行的后面几…

Q380 O(1)时间获取插入删除元素

思路 insert 其实用得到search&#xff0c;remove也是&#xff0c;当时o(1)想到的是hash set&#xff0c;但是对于random取,随机数相当于获得的是index,根据index获取元素 Set 数据结构不符合。 随机获取应该是数组&#xff0c;但是数组搜索和删除不是o(1) 最后的思路是 用h…

怎么防止文件在通讯软件外泄

为了防止文件在通讯软件外泄&#xff0c;企业可以采取一系列综合性的措施来加强管理和防护。 1. 使用高级别软件 企业级聊天软件&#xff1a;使用企业级聊天软件&#xff0c;这类软件通常具备更强大的安全管理功能&#xff0c;如文件传输加密、访问权限控制、审计日志记录等。…

【C++】深度解析:用 C++ 模拟实现 list 类,探索其底层实现细节

目录 list介绍 list模拟实现 list 节点类 list 的迭代器 定义 构造函数 解引用 operator前置和--与后置和-- operator与operator! list 类 构造函数 begin()和end() 拷贝构造 erase() clear() 析构函数 insert push_back 和 push_front pop_back 和 pop_front…

CTF-pwn-虚拟化-vmmware 前置

文章目录 参考vmware逃逸简介虚拟机和主机通信机制(guest to host)共享内存&#xff08;弃用&#xff09;backdoor机制Message_Send和Message_RecvGuestRPC实例RpcOutSendOneRawWork实例 vmware-rpctool info-get guestinfo.ip各个步骤对应的backdoor操作Open RPC channelSend …

数据结构初阶(c语言)-双向链表

这里首先纠正上篇文章一个错误&#xff0c;链表的一个有效数据点应该称为结点而不是节点。 一&#xff0c;双向链表的概念与结构 1.1概念与结构示意图 我们所说的双向链表全称为带头双向循环链表&#xff0c;也就是说此链表带有哨兵位结点(不存放任何数据的结点&#xff0c;且…

Oauth2协议的四种模式

B站视频 概念 Oauth2.0&#xff08;Open Authorization&#xff09; 一个关于授权的开放网络标准 允许用户授权第三方应用访问用户存储在其他服务提供者上的信息 不需要将用户名和密码提供给第三方应用 Oauth2中的各个角色 授权码模式 第一步 获取授权码 以上流程中的授…

产品经理NPDP好考吗?

NPDP是新产品开发专业人员的资格认证&#xff0c;对于希望在产品管理领域取得认可的专业人士来说&#xff0c;NPDP认证是一项重要的资格。 那么&#xff0c;产品经理考取NPDP资格认证究竟难不难呢&#xff1f; 首先&#xff0c;NPDP考试的难易程度取决于考生的背景和准备情况…

通信类IEEE会议——第四届通信技术与信息科技国际学术会议(ICCTIT 2024)

[IEEE 独立出版&#xff0c;中山大学主办&#xff0c;往届均已见刊检索] 第四届通信技术与信息科技国际学术会议&#xff08;ICCTIT 2024&#xff09; 2024 4th International Conference on Communication Technology and Information Technology 重要信息 大会官网&#xf…

C#调用OpenCvSharp实现图像的角点检测

角点检测用于获取图像特征&#xff0c;以支撑运动检测、目标识别、图像匹配等方面的应用。常用的角点检测算法包括Kitchen-Rosenfeld算法、Harris算法、KLT算法、SUSAN算法等&#xff0c;本文学习并测试Harris角点检测算法。   关于Harris算法的数学原理请见参考文献1的第18、…

解开基于大模型的Text2SQL的神秘面纱

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

【Unity国产化信创平台】虚拟机VMware Workstation Pro虚拟机下载安装

目录 一、虚拟机软件VMware Workstation Pro下载 二、虚拟机安装流程 1.傻瓜式安装 2.是否自动安装WHP 一、虚拟机软件VMware Workstation Pro下载 https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 官网各种访问出错&#xff0c;下载界面总是…

linux禁用root

linux禁用root 1. 禁止普通用户切换到root1.1 sudo -i和sudo -s的区别1.2 sudo -i和直接登录root账号的区别1.3 禁止sudo -i切换root1.4 禁止su - root切换root 2. 禁止root远程登录2.1 ssh禁止root登录2.2 禁止远程桌面登录 本文主要介绍&#xff1a; 如何禁止普通用户切换到r…