不包含本位置值的累乘陣列
給定乙個陣列arr,返回不包含本位置值的累乘陣列
例如,arr=[2,3,1,4],返回[12, 8, 24, 6],即除自己外,其他位置上的累乘
[要求]
時間複雜度為o(n
)o(n)
o(n)
,額外空間複雜度為o(1
)o(1)
o(1)
輸入描述:
第一行有兩個整數n, p。分別表示序列長度,模數(即輸出的每個數需要對此取模)
接下來一行n個整數表示陣列內的數
輸出描述:
輸出n個整數表示答案
示例1輸入
4 100000007
2 3 1 4
輸出12 8 24 6
備註:
1 ⩽n
⩽105
1 \leqslant n \leqslant 10^5
1⩽n⩽1051⩽
p⩽10
9+
71 \leqslant p \leqslant 10^9 +7
1⩽p⩽10
9+7
1 ⩽a
rri⩽
10
91 \leqslant arr_i \leqslant 10^9
1⩽arri
⩽10
9題解:
解法一:
所有非零元素的乘積記為 all ,若陣列中不含 0 ,則每個位置的結果為 all / a[i] ,若有 1 個0,對唯一的 a[i] == 0 的位置令 ret[i] = all,其它位置上的元素都是 0 ,若 0 的個數大於 1 ,則所有位置上的值都是 0 。
這種方法實現需要用到除法,因為需要取模運算,需要用到逆元,太麻煩,略過。。。
解法二:
記錄每個元素左邊和右邊元素的乘積,則最終結果就是每個位置左右陣列乘積相乘。
解法二**:
#include
using
namespace std;
const
int n =
100000
;typedef
long
long ll;
int n, p;
int a[n]
;ll ret[n]
;int
main
(void
) ll ans =1;
for(
int i = n -
1; i >0;
--i )
ret[0]
= ans % p;
for(
int i =
0; i < n;
++i )
printf
("%lld%c"
, ret[i]
," \n"
[i == n -1]
);}
CD 35不包含本位置值的累乘陣列
題目描述 給定乙個陣列arr,返回不包含本位置值的累乘陣列 例如,arr 2,3,1,4 返回 12,8,24,6 即除自己外,其他位置上的累乘 要求 時間複雜度為o n o n 額外空間複雜度為o 1 o 1 輸入描述 第一行有兩個整數n,p。分別表示序列長度,模數 即輸出的每個數需要對此取模 接...
hpuoj 1034 交換最值的位置 陣列
welcome to hpu online judge!時間限制 1 sec 記憶體限制 128 mb 提交 298 解決 94 給定乙個序列,現在讓你交換序列最大值和最小值的位置,並輸出交換後的序列。第一行輸入乙個整數t 代表有t 組測試資料。每組資料第一行輸入乙個整數n 代表序列有n 個元素。接...
js 根據值來查詢所在陣列的位置(索引值)
一 indexof 方法可返回某個指定的字串值在字串中首次出現的位置。indexof 方法可返回陣列中某個指定的元素位置。該方法將從頭到尾地檢索陣列,看它是否含有對應的元素。開始檢索的位置在陣列 start 處或陣列的開頭 沒有指定 start 引數時 如果找到乙個 item,則返回 item 的第...