2021-05-19:给定一个非负数组成的数组,长度一定大于1,想知道数组中哪两个数&的结果最大。返回这个最大结果。时间复杂度O(N),额外空间复杂度O(1)。

福大大 答案2021-05-19:

因为是正数,所以不用考虑符号位(31位)
首先来到30位,假设剩余的数字有N个(整体),看看这一位是1的数,有几个
如果有0个、或者1个
说明不管怎么在数组中选择,任何两个数&的结果在第30位上都不可能有1了
答案在第30位上的状态一定是0,
保留剩余的N个数,继续考察第29位,谁也不淘汰(因为谁也不行,干脆接受30位上没有1的事实)
如果有2个,
说明答案就是这两个数(直接返回答案),因为别的数在第30位都没有1,就这两个数有。
如果有>2个,比如K个
说明答案一定只用在这K个数中去选择某两个数,因为别的数在第30位都没有1,就这K个数有。
答案在第30位上的状态一定是1,
只把这K个数作为剩余的数,继续考察第29位,其他数都淘汰掉

现在来到i位,假设剩余的数字有M个,看看这一位是1的数,有几个
如果有0个、或者1个
说明不管怎么在M个数中选择,任何两个数&的结果在第i位上都不可能有1了
答案在第i位上的状态一定是0,
保留剩余的M个数,继续考察第i-1位
如果有2个,
说明答案就是这两个数(直接返回答案),因为别的数在第i位都没有1,就这两个数有。
如果有>2个,比如K个
说明答案一定只用在这K个数中去选择某两个数,因为别的数在第i位都没有1,就这K个数有。
答案在第i位上的状态一定是1,
只把这K个数作为剩余的数,继续考察第i-1位,其他数都淘汰掉。

代码用golang编写。代码如下:

  1. package main
  2. import "fmt"
  3. func main() {
  4. arr := []int{1, 2, 3, 4, 5}
  5. ret := maxAndValue2(arr)
  6. fmt.Println(ret)
  7. }
  8. func maxAndValue2(arr []int) int {
  9. // arr[0...M-1] arr[M....]
  10. M := len(arr)
  11. ans := 0
  12. for bit := 62; bit >= 0; bit-- {
  13. // arr[0...M-1] arr[M...]
  14. i := 0
  15. tmp := M
  16. for i < M { // arr[0...M-1]
  17. if (arr[i] & (1 << bit)) == 0 {
  18. M--
  19. arr[i], arr[M] = arr[M], arr[i]
  20. } else {
  21. i++
  22. }
  23. }
  24. if M == 2 { // arr[0,1]
  25. return arr[0] & arr[1]
  26. }
  27. if M < 2 {
  28. M = tmp
  29. } else { // > 2个数 bit位上有1
  30. ans |= 1 << bit
  31. }
  32. }
  33. return ans
  34. }

执行结果如下:


左神java代码

2021-05-19:给定一个非负数组成的数组,长度一定大于1,想知道数组中哪两个数&的结果最大。返回这个最大结果。时间复杂度O(N),额外空间复杂度O(1)。的更多相关文章

  1. 给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。

    对于N阶幻方,从1开始把数字从小到大按以下规则依次写入: 一.在第一行中间一列写入1 二.依次向右上方写入2.3.4...... 三.如果某数字写在了表格的某个方向外面,那就把这个数字向相反方向移动N ...

  2. 19.Longest Substring Without Repeating Characters(长度最长的不重复子串)

    Level:   Medium 题目描述: Given a string, find the length of the longest substring without repeating cha ...

  3. 2021.05.03 T3 数字

    2021.05.03 T3 数字 问题描述 一个数字被称为好数字当他满足下列条件: 1. 它有**2*n**个数位,n是正整数(允许有前导0) 2. 构成它的每个数字都在给定的数字集合S中. 3. 它 ...

  4. 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

    题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...

  5. 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]

    [来源]:腾讯2013实习生笔试   给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j])空间复杂度和O(n)的时间复杂度:除遍历计数器与a ...

  6. 日常Javaweb 2021/11/19

    Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...

  7. 2021.05.14 tarjan

    2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ...

  8. 2021.07.19 P2294 狡猾的商人(差分约束)

    2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...

  9. 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

    分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...

  10. Java-集合=第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下: List list = new ArrayList(); list.add(new A

    第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得 ...

随机推荐

  1. 函数XLOOKUP

    这个公式非OFFICE 365用户需要选中执行范围后 按Ctrl+Shift+Enter三键 (因为不支持公式溢出) XLOOKUP函数的基本结构是: =XLOOKUP(lookup_value,lo ...

  2. 实验十 团队作业7:团队项目用户验收&Beta冲刺

    项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验十 团队名称 零基础619 团队成员分工描述 任务1:亚楠,桂婷任务2:团队合作任务3:团队合作任务4:荣娟,鑫 团队的课程学习目 ...

  3. NTP同步时间

    什么是NTPNTP:Network Time Protocol(网络时间协议) ️ NTP 是用于同步网络中计算机时间的协议.它的用途是把计算机的时钟同步到世界协调时UTC. UTC:Universa ...

  4. 在教学中常被问到的几个vue3.x与typescript的问题,统一解答

    在教学当中,学生在学习vue3.x时,常常会问到typescript和vue3.x之间的关系,感觉这两个技术总是绑在一起的,下面老赵来统一解答一下: 那学vue3.x,为什么要求也要掌握typescr ...

  5. 宏任务&微处理

    事件循环 JavaScript 语言的一大特点就是单线程,同一个时间只能做一件事.为了协调事件.用户交互.脚本.UI 渲染和网络处理等行为,防止主线程的不阻塞,Event Loop 的方案应用而生. ...

  6. 【数据结构与算法学习】散列表(Hash Table,哈希表)

    实现语言:C++ 1. 散列表 散列表,英文名称为Hash Table,又称哈希表.杂凑表等. 线性表和树表的查找是通过比较关键字的方法,查找的效率取决于关键字的比较次数. 而散列表是根据关键字直接访 ...

  7. ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(Completion Suggest)

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  8. vue-i18n警告

    vue3引入vue-i18n警告: bundler build of vue-i18n. It is recommended to configure your bundler to explicit ...

  9. 四月八号java基础

    1.复合语句:JAVA语言不允许在两个嵌套的复合语句内声明同样的变量 2.注释:1)单行注释// 2)多行注释/*......*/3)/**......*/文件注释 3.else总是与之最近的if结构 ...

  10. Rocky Linux 初体验

    简介 Rocky Linux 是 CentOS 的一个分支,它位于 Red Hat Enterprise Linux(RHEL) 的下游.与 CentOS 一样,它提供了非常适合服务器的稳定版 Lin ...