2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个操作将相邻两个元素按位AND后替换为结果。 要求在最多执行 k 次操作的情况下, 计算数组
2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k,
可以执行一个操作将相邻两个元素按位AND后替换为结果。
要求在最多执行 k 次操作的情况下,
计算数组中所有元素按位OR后的最小值。
输入:nums = [3,5,3,2,7], k = 2。
输出:3。
解释:执行以下操作:
1.将 nums[0] 和 nums[1] 替换为 (nums[0] & nums[1]) ,得到 nums 为 [1,3,2,7] 。
2.将 nums[2] 和 nums[3] 替换为 (nums[2] & nums[3]) ,得到 nums 为 [1,3,2] 。
最终数组的按位或值为 3 。
3.是 k 次操作以内,可以得到的剩余元素的最小按位或值。
答案2024-06-19:
题目来自leetcode3022。
大体步骤如下:
1.使用一个循环从最高位(第 29 位)到最低位(第 0 位)来考虑每个比特位。
2.对于每个比特位 b,首先创建一个掩码 mask,初始为 0。在每次循环中通过将 1 左移 b 位来设置当前考虑的比特位为 1。
3.创建计数变量 cnt 来记录操作次数,初始设为 0。也创建一个变量 and 初始化为 -1(所有位均为 1)。
4.遍历数组中的每个数字 x:
将当前 and 与 x 按位与并存储结果到 and 中。
如果 and 不为 0,增加操作次数 cnt;否则重置 and 为 -1,准备处理下一段。
5.如果计数 cnt 大于 k,则将答案 ans 的第 b 位设置为 1,同时更新掩码 mask,排除当前位。
6.重复以上步骤直至处理到最低位(第 0 位)。
7.返回最终结果 ans,即所有元素按位 OR 后的最小值。
总的时间复杂度:O(N), 其中 N 为数组的长度,因为对每个元素进行了一次遍历。
总的额外空间复杂度:O(1),因为只使用了常数个额外变量来存储操作的中间结果,没有使用随数组长度变化的额外空间。
Go完整代码如下:
package main
import (
"fmt"
)
func minOrAfterOperations(nums []int, k int) (ans int) {
mask := 0
for b := 29; b >= 0; b-- {
mask |= 1 << b
cnt := 0 // 操作次数
and := -1 // -1 的二进制全为 1
for _, x := range nums {
and &= x & mask
if and != 0 {
cnt++ // 合并 x,操作次数加一
} else {
and = -1 // 准备合并下一段
}
}
if cnt > k {
ans |= 1 << b // 答案的这个比特位必须是 1
mask ^= 1 << b // 后面不考虑这个比特位
}
}
return
}
func main() {
nums := []int{3, 5, 3, 2, 7}
k := 2
fmt.Println(minOrAfterOperations(nums, k))
}
Python完整代码如下:
# -*-coding:utf-8-*-
def min_or_after_operations(nums, k):
ans = 0
mask = 0
for b in range(29, -1, -1):
mask |= 1 << b
cnt = 0 # 操作次数
and_op = -1 # -1 的二进制全为 1
for x in nums:
and_op &= x & mask
if and_op != 0:
cnt += 1 # 合并 x,操作次数加一
else:
and_op = -1 # 准备合并下一段
if cnt > k:
ans |= 1 << b # 答案的这个比特位必须是 1
mask ^= 1 << b # 后面不考虑这个比特位
return ans
nums = [3, 5, 3, 2, 7]
k = 2
print(min_or_after_operations(nums, k))
2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个操作将相邻两个元素按位AND后替换为结果。 要求在最多执行 k 次操作的情况下, 计算数组的更多相关文章
- 给定一个数组,求如果排序后,相邻两个元素的最大差值,要求时间复杂度为O(N)
第一种方法: 计数排序后,然后找出两两之间的最大差值 计数排序的时间复杂度是O(N) public class CountSort { public static void main(String[] ...
- C语言:计算输出给定数组中每相邻两个元素的平均值的平方根之和。
//计算输出给定数组中每相邻两个元素的平均值的平方根之和. #include <stdio.h> #include <math.h> ]) { double a,b,s=0.0 ...
- foreach() 中用指针指向数组元素,循环结束后最好销毁指针
之前发过一次微博,今天又遇到这个问题,并且再次犯错,于是决定再加深一下. 就举php.net里的一个例子吧 $a = array('abe','ben','cam'); foreach ($a as ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换 ab 不替换 ba 不替换 aba 不替换 aab 替换为 ...
- Fedora 19 vim c语言开发环境
1. Fedora 19 居然没有自带 gcc 和 g++: sudo yum -y install gcc gcc-c++ 2. 安装 vim 和 cvim 插件: sudo yum -y vim ...
- Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象
15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...
- STL所有算法简介 (转) http://www.cnblogs.com/yuehui/archive/2012/06/19/2554300.html
STL所有算法简介 STL中的所有算法(70个) 参考自:http://www.cppblog.com/mzty/archive/2007/03/14/19819.htmlhttp://hi.baid ...
- 刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
题目: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,下标 ,a ,b , c 对应数相加等于 targe 找出所有满足条件且不重复的三元组下标 解析: ...
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
随机推荐
- [ELK] 生产环境使用 Elasticsearch Docker 镜像的优化选项
[ 配置内核设置 vm.max_map_count 至少为 262144 ] https://www.elastic.co/guide/en/elasticsearch/reference/curre ...
- [FAQ] Python list 的值是带有小括号的是什么意思 ?
python 中的 list 即列表,是用中括号 [ ] 表示的数组列表: dict 即字典,是用花括号 { } 表示的 json 对象: tuple 即元祖,是用小括号表示的序列: 见到它们之间的组 ...
- 国产 Web 组态软件 TopStack V5.0 发布
简介 TopStack 是一款轻量型 Web 组态软件,提供设备数据采集.定时任务.控制策略.联动控制.设备告警.设备维护管理.设备绩效管理.能源管理.组态开发.报表开发等核心功能.支持移动端访问,支 ...
- centos7虚拟机部署netcore3.1服务供局域网访问
如果买了亚马逊.腾讯.阿里等服务器,基本上几分钟就可以跑aspnetcore,外网访问分分钟.但是便宜点的服务器访问速度就没那么理想.这时候就需要考虑零成本的虚拟机部署了,当然这个基本都是局域网做测试 ...
- 实验8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim
2. 汽车尾灯控制器 2.1 实验要求:设计一个汽车尾灯控制电路. (1)功能:汽车左右两侧各有3个尾灯,要求控制尾灯按如下规则亮灭. 汽车沿直线行驶时,两侧指示灯全灭. 右转弯时,左侧的指示灯全灭, ...
- WSL2使用桥接网络,并指定IP
前言 微软终于解决了宇宙级难题了,一直以来的WSL2每次启动IP都是动态分配的,并且是NAT的网络.当然网上对此也有一些解决方案,编写脚本在启动时修改,但是太麻烦了,这次很完美的解决了这个难题. 检查 ...
- gprMax项目代码分解:gprMax.py
目录 1. 引言 2. 代码分解 (1) 导入模块 (2)main()函数 (3)run_main()函数 (4)run_std_sim()函数 (5)run_benchmark_sim()函数 (6 ...
- linux文本三剑客之sed命令详解
linux文本三剑客之sed命令详解 目录 linux文本三剑客之sed命令详解 1.sed命令详解 1.1 地址定界和编辑命令 1.2 搜索替换 1.3 sed高级用法 1.sed命令详解 sed称 ...
- 适用于任何设备的屏幕共享应用程序 – Mirroring360
Mirroring360 适用于 Windows.Mac.iOS.Android 和 Chromebook 设备的屏幕镜像和屏幕共享,非常适合商务和教育! 屏幕共享应用程序可以帮助增强业务专业人员,讲 ...
- CentOS7 升级 curl 到 HTTP2
目录 文章目录 目录 编译安装 YUM 升级 编译安装 安装编译环境: yum -y groupinstall "Development Tools" yum -y install ...