2024.3.20
题目来源
我的题解
方法一 贪心
采用贪心,使得最终的序列应该是满足除了二进制位全为1的 2 p − 1 2^p-1 2p−1之外,其余的首尾两两配对进行交换,最终使得半数为1,半数为 2 p − 1 2^{p-1} 2p−1.
时间复杂度 :O(n)
空间复杂度:O(1)
java
public int minNonZeroProduct(int p) {
if (p == 1) {
return 1;
}
long mod = 1000000007;
long x=fastPow(2,p,mod)-1;
long y = (long) 1 << (p - 1);
long t=fastPow(x-1,y-1,mod);
t=t*x%mod;
return (int)t;
}
public long fastPow(long x, long n, long mod) {
long res = 1;
for (; n != 0; n >>= 1) {
if ((n & 1) != 0) {
res = res * x % mod;
}
x = x * x % mod;
}
return res;
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~