線性時空實現陣列各個元素除該位置外連乘

2021-08-18 20:17:55 字數 775 閱讀 8462

乙個長度為n的陣列a[0],a[1],...,a[n-1]。現在更新陣列的名個元素,即a[0]變為a[1]到a[n-1]的積,a[1]變為a[0]和a[2]到a[n-1]的積,...,a[n-1]為a[0]到a[n-2]的積(就是除掉當前元素,其他所有元素的積)。程式要求:具有線性複雜度,且不能使用除法運算子。

分析:根據要求線性且不能用除法,那麼就得需要分段線性策略,這道題如果能用除法的話就會非常簡單,第一遍先對連乘陣列所有元素,然後第二遍逐一除對應的陣列元素!如果不能用除法,那麼思想就得轉換成將乘法分階段,因而就產生了一種left和right演算法,這也是題目本質解析,新的元素等於之前位置的左右元素連乘!第一遍我們只掃左邊的連乘,第二遍掃右邊的連乘,由於空間要求o(1),因此我們可以使用第乙個元素的特殊性做臨時空間,因而無需再借助其他空間。

#include#includeusing namespace std;

void multi_change(int a,int b,int n)

b[0] = 1;

for (int i = n - 2; i>0; i--)//begin index n-2, right

b[0] *= a[1];

}int main()

; int b[5];

multi_change(a,b,5);

for (int i = 0; i < 5;i++)

printf("%d\t",b[i]);

while (true)

return 0;

}

線性表 陣列實現

include include includeusing namespace std define ms a memset a,0,sizeof a define maxlength 100 線性表陣列實現,定義乙個具有兩個域結構體,陣列下標為0的地方不存放元素,可以使位置i對應整數i 第乙個域是陣...

線性表陣列實現

線性表 順序表示 用陣列實現,比較簡單 線性表的順序表示指的是用一組位址連續的儲存單元一次儲存線性表的資料元素,在高階語言程式設計中,陣列具有隨機訪問的特性,因此通常都用陣列來描述資料結構中的順序儲存結構,對於線性表,可以用一維陣列來實現 1 順序表的初始化 定義乙個object型別的陣列,可儲存任...

陣列各個元素不相等的判斷方式

總time limit 1000ms memory limit 65536kb description 韶華易逝,光陰苒冉。當你看到此題的時候,2013年已經離你遠去。2013年是個特殊的年份你知道麼?它是1987年以後第乙個年份各個數字位互不相等的年份。現在知道也不晚,因為2014年也是乙個特殊年...