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

网站建设合同书(范本)网站软件下载

网站建设合同书(范本),网站软件下载,网站系统建站,企业网络广告推广方案1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…

1.题目介绍

        给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

  • 2 <= nums.length <= 105
  • -30 <= nums[i] <= 30
  • 输入 保证 数组 answer[i] 在  32 位 整数范围内

2.解决思路

        既然给定一个数组,让求得每个位置的前缀元素和后缀元素的乘积,实际上就是分别求前缀积和后缀积。我一开始的思路是:如果每次计算前缀积和后缀积的时候都遍历一遍就太浪费时间了,所以就想着如何减少遍历次数,也就是利用前面遍历过的结果,我就想到了“后一个元素的前缀积=前一个元素的前缀积*前一个元素”,这样就可以做到前缀积无需遍历,只需要每次相乘即可。但是这样的问题是由于是从前向后计算,那么后缀积其实是没办法通过这种方式得到的,只能遍历计算,最终时间复杂度还是O(n²)。

        所以换一种思路 ,能不能在计算的时候直接取到前缀积和后缀积,所以可以直接提前进行两次计算,分别计算每个位置的前缀积和后缀积,结合上面的思路,计算前缀积和后缀积的过程都只需要一次遍历即可。最终拿着这两个数组按位置相乘就是最终的答案

3.步骤讲解

        1.先对一些特殊情况进行提前处理

        2.创建前缀积数组和后缀积数组,分别用来存储每个位置的前缀积或者后缀积

        3.初始化结果数组

        4.计算前缀乘积,第一个位置的前缀积为1,后面每个位置的前缀积都是上一个前缀积*上一               个元素值

        5.计算后缀乘积,从后向前计算。最后一个位置的后缀积为1,后面每个位置的前缀积都是后              一个后缀积*后一个元素值。

        6.计算每个位置的前缀积*后缀积,也就是通过索引取得前缀积数组和后缀积数组相乘

4.代码展示

public static int[] test2(int[] nums) {int n = nums.length;if (n == 0) return new int[0];if (n == 1) return new int[]{0};// 创建前缀乘积和后缀乘积数组int[] prefix = new int[n];int[] suffix = new int[n];//结果数组int[] results = new int[n];// 计算前缀乘积prefix[0] = 1;for (int i = 1; i < n; i++) {prefix[i] = prefix[i - 1] * nums[i - 1];}// 计算后缀乘积suffix[n - 1] = 1;for (int i = n - 2; i >= 0; i--) {suffix[i] = suffix[i + 1] * nums[i + 1];}// 计算结果for (int i = 0; i < n; i++) {results[i] = prefix[i] * suffix[i];}return results;}

5.执行结果

在leetcode中测试用例平均耗时2ms

内存分布55.04MB 

 

超时代码示例(O(n²)):

 public static int[] test(int[] nums) {if (nums.length == 0){return new int[0];}if (nums.length == 1){return new int[]{0};}//先计算所有元素的前缀乘和后缀乘int tempPreMulti = 1;int tempSufMulti = 1;int[] results = new int[nums.length];HashMap<Integer, Integer[]> multi = new HashMap<>();for (int i = 0; i < nums.length; i++) {//计算前缀乘if (i != 0) {tempPreMulti = multi.get(i - 1)[0] * nums[i - 1];}//计算后缀乘for (int j = i+1; j < nums.length; j++) {tempSufMulti  *= nums[j];}multi.put(i, new Integer[]{tempPreMulti, tempSufMulti});//存入数组results[i] = tempPreMulti*tempSufMulti;//重置tempSufMulti = 1;tempPreMulti = 1;}return results;}

http://www.dtcms.com/wzjs/257496.html

相关文章:

  • 百度网站地图生成北京疫情最新消息情况
  • 国外网站html5从上到下连续变动百度一下全知道
  • 建设银行深圳天健世纪支行网站大学生网页制作成品模板
  • 营销网站建设企业网络软文范例
  • 做网站组织架构百度免费安装
  • 网站运营软件济南网站seo公司
  • 北京比较好的网络营销公司百度快照优化公司
  • wordpress自定义排版seo兼职论坛
  • 成都高新区国土规划建设局网站2023年国际新闻大事件10条
  • wordpress收录优化怎么做网络推广优化
  • 网站建设需不需要招标站长网站查询
  • 动态网站开发相关技术百度新闻排行榜
  • 胶州网站建设哪家好搜索引擎推广渠道
  • 广州市住房建设局网站今日实时热点新闻事件
  • 用360云盘做网站百度收录提交
  • 网站设计优秀作品nba最新比赛直播
  • 工程建设合同湖南专业seo优化
  • html5网页设计软件网站优化课程
  • 购物网站管理系统免费建站网站一级
  • 网站制作价格明细百度客户端手机版
  • asp做企业网站很好啊大连网络推广
  • 刚做外贸最好用哪个网站北京搜索优化排名公司
  • 嵌入式软件开发是什么专业短视频seo优化排名
  • 凡客手机网站怎么建设网络推广属于什么专业
  • 交友免费的网站建设哈尔滨最新今日头条新闻
  • 淘客手机版网站怎么做免费推广app软件下载
  • 百度收录网站的图片整合营销传播工具有哪些
  • phpcms做的网站网站制作论文
  • 网站怎么做站内美化成人技能培训机构
  • 珲春建设局网站苏州优化排名seo