Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-05-19:给定一个非负数组成的数组,长度一定大于1

2021-05-19:给定一个非负数组成的数组,长度一定大于1

原创
作者头像
福大大架构师每日一题
修改于 2021-05-20 06:42:58
修改于 2021-05-20 06:42:58
3460
举报

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编写。代码如下:

代码语言:txt
AI代码解释
复制
package main

import "fmt"

func main() {
    arr := []int{1, 2, 3, 4, 5}
    ret := maxAndValue2(arr)
    fmt.Println(ret)
}

func maxAndValue2(arr []int) int {
    // arr[0...M-1]  arr[M....]
    M := len(arr)
    ans := 0
    for bit := 62; bit >= 0; bit-- {
        // arr[0...M-1] arr[M...]
        i := 0
        tmp := M
        for i < M { // arr[0...M-1]
            if (arr[i] & (1 << bit)) == 0 {
                M--
                arr[i], arr[M] = arr[M], arr[i]
            } else {
                i++
            }
        }
        if M == 2 { // arr[0,1]
            return arr[0] & arr[1]
        }
        if M < 2 {
            M = tmp
        } else { // > 2个数  bit位上有1
            ans |= 1 << bit
        }
    }
    return ans
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。
2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。返回最大的异或结果。
福大大架构师每日一题
2021/05/14
5380
​2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k,如果两个人能力差值正好为k,那么可以凑在一起比赛。一局比赛只有两个人,返回最多可以同时有多少场比赛。
福大大架构师每日一题
2021/06/23
9630
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。如果arr长度为偶数,两个集合包含数的个数要一样多;如果arr长度为奇数,两个集合包含数的个数必须只差一个。请尽量让两个集合的累加和接近,返回最接近的情况下,较小集合的累加和。
福大大架构师每日一题
2021/02/25
3060
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
10道最高频的手撕代码题都会了吗?(Python版)
相信我,彻底掌握以下这10道题的解法,你顺利做出手撕代码面试题目的概率至少不低于50%。
程序员小猿
2021/01/19
1.1K0
10道最高频的手撕代码题都会了吗?(Python版)
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是
2023-03-02:给定一个数组arr,长度为n,任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的!求所有可能的合法子序列中,最大中位数是多少?中位数的定义为上中位数,1, 2, 3, 4的上中位数是2,1, 2, 3, 4, 5的上中位数是3,2 <= n <= 10^5,1 <= arri <= 10^9。来自京东。实习岗位笔试题。答案2023-03-02:这道题看起来是实习题,实际上有难度。方法一:要i还是不要i,递归或者动态规划。方法二:以结果为导向,二分法。时间复杂度:O(N*
福大大架构师每日一题
2023/03/02
5670
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是
2023-04-19:给定一个非负数组arr任何两个数差值的绝对值,如果arr中没有,都要加入到arr里然后新的arr继续,任何
我们可以先从暴力方法考虑,逐步计算每一轮得到的新的 arr。具体来说,我们可以用一个列表 list 来记录每一轮的 arr,用一个 set 来记录 arr 中已有的数值。对于每一轮,我们遍历 list 中的所有元素,把它们之间的差值(绝对值)加入到 set 中,如果这个差值不在 set 中,则将其加入到 list 和 set 中。重复进行此操作,直到 list 不再发生变化为止,此时 list 的长度即为最终 arr 的长度。
福大大架构师每日一题
2023/06/09
3340
2023-04-19:给定一个非负数组arr任何两个数差值的绝对值,如果arr中没有,都要加入到arr里然后新的arr继续,任何
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个。 返回有没有可能分出的4个部分累加和一样大,如:{3,2,3,7,4,4,3,1,1,6,7,1,5,2},可以分成{3,2,3}、{4,4}、{1,1,6}、{1,5,2}。分割点是不算的!
福大大架构师每日一题
2021/08/28
2800
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7
2022-04-14:小美有一个长度为n的数组,为了使得这个数组的和尽量大,她向会魔法的小团进行求助。
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_01_2_week/Code05_MagicTowSubarrayMakeMaxSum.java)
福大大架构师每日一题
2022/06/04
5130
2022-04-14:小美有一个长度为n的数组,为了使得这个数组的和尽量大,她向会魔法的小团进行求助。
求解连续子数组和全解析-常规解法VS树状数组!
本文将介绍几求解数组前缀和和连续子数组和的三种方法,分别是遍历法、辅助数组法、树状数组法。
石晓文
2019/05/05
5460
求解连续子数组和全解析-常规解法VS树状数组!
2021-11-22:给定一个正数数组arr,表示每个小朋友的得
任何两个相邻的小朋友,如果得分一样,怎么分糖果无所谓,但如果得分不一样,分数大的一定要比分数少的多拿一些糖果;
福大大架构师每日一题
2021/11/22
2050
2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range
2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range。x有序,xi表示i号怪兽在x轴上的位置;hpi表示i号怪兽的血量 。range表示法师如果站在x位置,用AOE技能打到的范围是: x-range,x+range,被打到的每只怪兽损失1点血量 。返回要把所有怪兽血量清空,至少需要释放多少次AOE技能?
福大大架构师每日一题
2021/05/10
5150
2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
2021-10-26:给定一个数组arr,arri = j,表示第i号试题的难度为j。给定一个非负数M。想出一张卷子,对于任何相邻的两道题目,前一题的难度不能超过后一题的难度+M。返回所有可能的卷子种数。
福大大架构师每日一题
2021/10/26
3210
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序列中累加和%m之后的最大值。
福大大架构师每日一题
2021/04/04
9000
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-08-03:完美洗牌问题。给定一个长度为偶数的数组
2021-08-03:完美洗牌问题。给定一个长度为偶数的数组arr,假设长度为N*2,左部分:arrL1……Ln,右部分: arrR1……Rn,请把arr调整成arrL1,R1,L2,R2,L3,R3,…,Ln,Rn。要求:时间复杂度O(N),额外空间复杂度O(1)。
福大大架构师每日一题
2021/08/03
3830
2021-08-03:完美洗牌问题。给定一个长度为偶数的数组
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n
本题可以用多种算法来解决,下面我们将介绍四种常见的做法,分别是暴力枚举、动态规划、单调栈和差分。
福大大架构师每日一题
2023/03/18
9850
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n
2023-07-17:给定一个数组arr,长度为n, 再给定一个数字k,表示一定要将arr划分成k个集合, 每个数字只能进一个集
1.定义一个结构体Info,包含两个字段:sum表示集合内所有元素的和,cnt表示集合内元素的个数。
福大大架构师每日一题
2023/07/25
2620
2023-07-17:给定一个数组arr,长度为n, 再给定一个数字k,表示一定要将arr划分成k个集合, 每个数字只能进一个集
2021-08-09:给定一个有正、有负、有0的数组arr
2021-08-09:给定一个有正、有负、有0的数组arr,给定一个整数k,返回arr的子集是否能累加出k。1)正常怎么做?2)如果arr中的数值很大,但是arr的长度不大,怎么做?
福大大架构师每日一题
2021/08/09
3340
2021-08-09:给定一个有正、有负、有0的数组arr
2021-04-05:给两个长度分别为M和N的整型数组...
2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。返回所有可能的结果中,代表最大数字的结果。
福大大架构师每日一题
2021/04/05
4790
2021-04-05:给两个长度分别为M和N的整型数组...
一天一大 leet(转变数组后最接近目标值的数组和)难度:中等 DAY-14
给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。
前端小书童
2020/09/24
6380
一天一大 leet(转变数组后最接近目标值的数组和)难度:中等 DAY-14
Leetcode | 第A节:数组综合题(1)
在这一节我们开始更多关注数组和字符串的一些题目。事实上不仅仅是我们,官方也很难将这两个类别的题目,从算法或者数据结构的角度进行区分。毕竟很多很多的算法题都需要依赖数组,所有的字符串的题目不管用什么方法去做,它也都是字符串相关的问题。因此,我们在一开始介绍这些的时候,也会大概率与之前已经介绍的一些内容相结合。
学弱猹
2021/08/06
5170
推荐阅读
​2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。
5380
2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k
9630
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
3060
10道最高频的手撕代码题都会了吗?(Python版)
1.1K0
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是
5670
2023-04-19:给定一个非负数组arr任何两个数差值的绝对值,如果arr中没有,都要加入到arr里然后新的arr继续,任何
3340
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7
2800
2022-04-14:小美有一个长度为n的数组,为了使得这个数组的和尽量大,她向会魔法的小团进行求助。
5130
求解连续子数组和全解析-常规解法VS树状数组!
5460
2021-11-22:给定一个正数数组arr,表示每个小朋友的得
2050
2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range
5150
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
3210
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
9000
2021-08-03:完美洗牌问题。给定一个长度为偶数的数组
3830
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n
9850
2023-07-17:给定一个数组arr,长度为n, 再给定一个数字k,表示一定要将arr划分成k个集合, 每个数字只能进一个集
2620
2021-08-09:给定一个有正、有负、有0的数组arr
3340
2021-04-05:给两个长度分别为M和N的整型数组...
4790
一天一大 leet(转变数组后最接近目标值的数组和)难度:中等 DAY-14
6380
Leetcode | 第A节:数组综合题(1)
5170
相关推荐
​2021-05-14:给定一个数组arr,想知道arr中哪两个数的异或结果最大。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档