leetcode1969--数组元素的最小非零乘积

1. 题意

给定一个非零的二进制位排列;

允许交换其中两个数的二进制位任意次。

求交换后得到数组的最小非零乘积。

如:

p = 3 a = [ 001 010 011 100 101 110 111 ] p=3\\ a=[001\ 010\ 011\ 100\ 101\ 110\ 111]\\ p=3a=[001 010 011 100 101 110 111]
010101交换位置得到110001
011100交换位置得到110001
得到答案
1x7x1x6x1x6=1512

2. 题解

首先题目中的数组一定是在 [ 1 , 2 p − 1 ] [1,2^{p}-1] [1,2p1]之间;

交换二进制位意味着什么呢?

其实就是将

x + y → x ′ + y ′ x + y = x ′ + y ′ x+y \rightarrow x'+y'\\ x+y=x'+y' x+yx+yx+y=x+y

由于求得的是最小的非0乘积,所以我们最少要保留最低位为1

对于两个数交换后乘积最大实际上是求
m i n ( x y ) , s . t . x + y = k min(xy),s.t. x+y=k min(xy),s.t.x+y=k
所以我们需要尽量将两个数的差值变大。

所以我们分解的形式应为:
a & b = 0 a ⊕ b = 2 p − 1 a\&b=0\\ a \oplus b=2^p-1 a&b=0ab=2p1

所以对于数组 [ 1 , . . . , 2 p − 1 ] [1,...,2^p-1] [1,...,2p1]的乘积为

1 × ( 2 p − 1 ) × ( 2 p − 2 ) 2 p − 1 − 1 1 \times(2^p-1) \times (2^p-2)^{2^{p-1}-1} 1×(2p1)×(2p2)2p11

由于 2 2 p − 1 − 1 2^{2^p-1}-1 22p11很大,所以需要使用快速幂。

  • 代码
class Solution {
public:long long fast_pow(long long a,unsigned long long b) {long long MOD = 1e9+7;long long base = a%MOD;long long ans = 1;while (b) {if (b & 1) ans = ans * base % MOD; b >>= 1;if (b)base = base  * base % MOD;}return ans % MOD ;}int minNonZeroProduct(int p) {long long ans = ((unsigned long long)1 << p) - 1;
int MOD = 1e9+7;long long base = ans - 1;long long  cnt = ((unsigned long long)1 << (p -1)) - 1;// std::cout << "base:" << base << " cnt: " << cnt << std::endl; ans = ans%MOD * fast_pow(base, cnt) %MOD;return ans % MOD;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CPU的Cache和MESI协议

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第20篇&#xff0c;在这里分享给大家&#xff0c;这篇文章讲CPU的Cache和MESI协议。 为什么需要高速缓存&#xff1f; 通过图片可以清晰的看到&#xff0c;随着时间的发展CPU的性能差距和内存越来越大&#…

Js 原型和原型链

在 JavaScript 中&#xff0c;每个对象都有一个特殊的内部属性&#xff08;[[Prototype]]&#xff09;&#xff0c;它就是对于其他对象的引用。这个其他对象被称为该对象的“原型”。 原型链是由原型对象形成的链状结构。当试图访问一个对象的属性时&#xff0c;如果对象自身没…

使用光标精灵更换电脑鼠标光标样式,一键安装使用

想要让自己在使用电脑时更具个性化&#xff0c;让工作和娱乐更加愉快&#xff0c;改变你的电脑指针光标皮肤可能是一个简单而有效的方法。很多人或许并不清楚如何轻松地调整电脑光标样式&#xff0c;下面我就来分享一种简单的方法。 电脑光标在系统里通常只有几种默认图案&…

SpringBoot项目通过触发器调度实现定时任务

文章目录 前言一、quartz是什么&#xff1f;二、quartz中核心概念三、集成步骤1.引入依赖2.demo样例a.定义一个任务参数实体类b.定义操作触发器、定时任务接口及实现c.作业实现d.结果截图 四、其他1.QuartzJobBean和Job区别2.注意事项3.作业&#xff08;Job&#xff09;和触发器…

飞腾D2000+复旦微 ARM+FPGA+预装麒麟 全国产化COMe模块

产品概述 COMe-D2000核心模块满足PICMG COM Express Type-6 Rev2.1标准规范&#xff0c;遵从COMe BASIC尺寸标准&#xff0c;采用加固设计方案&#xff0c;内存和SSD存储均采用板贴方式&#xff0c;增强了可靠性&#xff0c;体积也得到良好控制。COMe-F662采用国产飞腾腾锐D200…

黑马程序员——javase进阶——day11——字符流,编码表,对象流,其他流

目录&#xff1a; 编码表 思考编码表介绍编码表小结字节流读中文出现码的原码字符输出流 字符流输出介绍FileWriter的成员FileWriter写数据的步骤字符输出流练习字符输入流 字节输入流介绍FileReader的成员字符缓冲流 字符缓冲流字符缓冲流特有的功能字符缓冲流练习转换流 转换…

IO多分复用

#include<myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.65.131" //服务器IPint main(int argc, const char *argv[]) {//1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0); //参数1&#xff1a;…

MyBatis是纸老虎吗?(四)

在《MyBatis是纸老虎吗&#xff1f;&#xff08;三&#xff09;》这篇文章中我们一起梳理了MyBatis配置文件的解析流程&#xff0c;并详细介绍了其中的一些常见节点的解析步骤。通过梳理&#xff0c;我们弄清楚了MyBatis配置文件中的一些常用配置项与Java Bean之间的对应关系&a…

敏捷项目管理到底有什么价值?一篇说清楚

敏捷方法是一种理念&#xff0c;采用基于人员、协作和共同价值观的组织模型。它作为新兴的项目管理模式&#xff0c;简化了传统项目管理的繁琐流程和文档。敏捷方法采用波浪式规划&#xff08;rolling wave&#xff09;&#xff1b;迭代递增式交付&#xff1b;对变化做出快速而…

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention电能质量扰动识别模型

往期精彩内容&#xff1a; 电能质量扰动信号数据介绍与分类-Python实现-CSDN博客 Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(三)基于Transformer…

电商数据分析23——利用数据分析优化电商平台的搜索功能

目录 写在开头1. 电商搜索功能的重要性1.1 搜索功能对用户的购物体验的影响1.2 搜索功能对电商平台销售转化率的影响 2. 数据分析在搜索功能优化中的应用2.1 搜索查询日志分析2.2. 用户行为和偏好分析2.3. 搜索结果相关性和排序优化 3. 搜索功能优化的成功案例3.1 案例分享&…

【python开发】并发编程和网络编程的结合+并发和并行概念区别+单例模式通过类来实现

知识补充 一、并发编程&网络编程&#xff08;一&#xff09;多线程socket服务端&#xff08;二&#xff09;多进程&socket服务端 二、并发和并行三、单例模式 一、并发编程&网络编程 网络编程&#xff1a;基于网络基础知识、socket模块实现网络的数据传输&#xf…

AI浸入社交领域,泛娱乐APP如何抓住新风口?

2023年是大模型技术蓬勃发展的一年&#xff0c;自ChatGPT以惊艳姿态亮相以来&#xff0c;同年年底多模态大模型技术在国内及全球范围内的全面爆发&#xff0c;即模型能够理解并生成包括文本、图像、视频、音频等多种类型的内容。例如&#xff0c;基于大模型的文本到图像生成工具…

基于Python的图形用户界面设计及应用

基于Python的图形用户界面设计及应用 摘要&#xff1a;随着信息技术的飞速发展&#xff0c;图形用户界面&#xff08;GUI&#xff09;已成为现代软件不可或缺的一部分。Python作为一种简洁、易读且功能强大的编程语言&#xff0c;提供了多种GUI开发工具包&#xff0c;如Tkinte…

读锁和写锁(共享锁和排他锁)介绍 以及相关类 ReentrantReadWriteLock 学习总结,使用场景

一、读锁和写锁概念 读锁&#xff1a; 也称共享锁&#xff0c;多个线程可以共享资源&#xff0c;同时读取数据和资源&#xff0c;但是不允许出现写操作。多个线程可以同时持有读锁&#xff0c;提高并发性能&#xff0c;因为不会对数据修改。 写锁&#xff1a; 也称排他锁&…

实战纪实 | 从接口信息泄露到RCE

打点 开局一个登录框 信息收集 发现了一处接口泄露了部分信息 不过只有支付宝密钥的信息无法扩大危害&#xff0c;此时尝试寻找了一下其他同类型系统同样的接口&#xff0c;查看一下是否泄露的信息相同 因为如果相同就说明是静态的&#xff0c;没有价值 横向收集 此时访问其…

后端系统开发之——接口参数校验

今天难得双更&#xff0c;大家点个关注捧个场 原文地址&#xff1a;后端系统开发之——接口参数校验 - Pleasure的博客 下面是正文内容&#xff1a; 前言 在上一篇文章中提到了接口的开发&#xff0c;虽然是完成了&#xff0c;但还是缺少一些细节——传入参数的校验。 即用户…

JMeter 并发测试和持续性压测详解

并发测试和持续性压测都是评估系统性能的常用方法&#xff0c;它们可以帮助开发人员发现并解决系统中的性能问题。本文来详细介绍下。 概念 并发测试&#xff1a; 旨在评估系统在同时处理多个用户请求时的性能。在这种 测试 中&#xff0c;系统会暴露于一定数量的用户负载下&…

【Flutter和H5数据传递问题】window.postMessage方法引起的数据问题

Flutter 前言问题双引号问题请求数据问题 总结 前言 距离上一篇博客已经过了很长时间了&#xff0c;这次在做公司项目中又遇到了新的问题&#xff0c;决定还是写出来看看各位大神对此有什么看法&#xff0c;分享一下各位的想法。 问题 首先&#xff0c;公司项目的框架是由Fl…

2024最新华为OD机试试题库全 -【执行时长】- C卷

1. 🌈题目详情 1.1 ⚠️题目 为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。…