剑指offer52 构建乘积数组
这个题的错误和c++ primier中名字的作用域例子相似。只是这里将int换成了vecto<int>这种形式。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int length = A.size();
vector<int> B;
if(length <= )
return B;
else
vector<int> B(length,);
for(int i = ;i < length;i++){
B[i] = B[i-] * A[i-];
}
int tmp = ;
for(int j = length-;j >= ;j--){
tmp *= A[j+];
B[j] *= tmp;
}
return B;
}
};
这个代码报“段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起”的错误。
在else里新建了一个局部变量B,覆盖了全局变量。但两个for语句访问的B还是全局变量B,这个全局变量B是空的vector,所以会报错。
一种解决办法是将两个for语句放进else这个块作用域中
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int length = A.size();
vector<int> B;
if(length <= )
return B;
else{
vector<int> B(length,);
for(int i = ;i < length;i++){
B[i] = B[i-] * A[i-];
}
int tmp = ;
for(int j = length-;j >= ;j--){
tmp *= A[j+];
B[j] *= tmp;
}
return B;
}
}
};
另一种改变方式是对全局变量B进行改变。需要注意的是,vector<int> B(length,1)是定义变量并初始化,相当于申请了一个新的变量,只是这个变量名和全局变量的变量名相同。B = vector<int> (length,1)不是初始化,是一个赋值语句,不要认为vector<int> B没有给具体值就没有初始化,在定义的时候都进行了初始化,只是这里的初始化为空。对于自己设想的种种
情况以及这两种正确解法,可以把这个换成int a这种定义就方便理解了。
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int length = A.size();
vector<int> B;
if(length <= )
return B;
else
B = vector<int> (length,);
for(int i = ;i < length;i++){
B[i] = B[i-] * A[i-];
}
int tmp = ;
for(int j = length-;j >= ;j--){
tmp *= A[j+];
B[j] *= tmp;
}
return B;
}
};
剑指offer52 构建乘积数组的更多相关文章
- 剑指Offer——构建乘积数组
题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]. ...
- 剑指Offer-51.构建乘积数组(C++/Java)
题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不能 ...
- 剑指Offer-构建乘积数组
package Array; import sun.security.util.Length; /** * 构建乘积数组 * 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,... ...
- 剑指offer-构建乘积数组-数组-python
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...
- 【Java】 剑指offer(66) 构建乘积数组
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一个数组A[0, 1, …, n-1],请构建一个数组B[ ...
- 剑指offer 66. 构建乘积数组(Leetcode 238. Product of Array Except Self)
剑指offer 66. 构建乘积数组 题目: 给定一个数组A[0, 1, ..., n-1],请构建一个数组B[0, 1, ..., n-1],其中B中的元素B[i] = A[0] * A[1] * ...
- 剑指 Offer 66. 构建乘积数组 + 思维
剑指 Offer 66. 构建乘积数组 Offer_66 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarre ...
- 力扣 - 剑指 Offer 66. 构建乘积数组
题目 剑指 Offer 66. 构建乘积数组 思路1 按照一般的思路就是将所有的相乘,然后除以每一位数字就是答案,但是题目要求我们不能使用除法,因此我们会想到每次遍历到每个数字的时候,在遍历一遍数组, ...
- 【剑指Offer】构建乘积数组 解题报告(Python)
[剑指Offer]构建乘积数组 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
随机推荐
- java——线段树 SegmentTree
应用: 区间染色 区间查询 线段树不是完全二叉树,线段树是平衡二叉树 使用数组来实现线段树:存储空间为4n 以下是使用数组实现的静态线段树: public class SegmentTree<E ...
- android 闹钟设置问题
Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...
- java替换word
package demo; import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOExcept ...
- form表单序列化数据之后,追加额外数据
form表单序列化数据之后追加额外数据多使用在js中,下面是追加额外数据的代码: <span style="font-size:18px;">$.param({'inv ...
- IOS Intro - Property Synthesis
http://www.thecodecrate.com/ios/objective-c/objective-c-property-synthesize/ 01. atomic ...
- Kudu的Using Apache Kudu with Apache Impala(官网推荐的步骤)
不多说,直接上干货! http://kudu.apache.org/docs/kudu_impala_integration.html http://blog.csdn.net/lovebyz/art ...
- .vimrc的配置
set nocompatible set encoding=utf-8 set fileencodings=utf-8,chinese set tabstop=4 set cindent shiftw ...
- ubuntu 下安装配置LAMP
详情见: http://www.linuxeden.com/html/softuse/20130731/141934.html
- Vue.js基础语法(二)组件
vue学习的一系列,全部来自于表哥---表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 把一段经常要用的东 ...
- Hibernate课程 初探一对多映射2-7 测试-修改和删除学生信息
package com.ddwei.entity; import java.util.Set; import org.hibernate.Session; import org.hibernate.T ...