当前位置: 首页 > news >正文

【LeetCode:3133】数组最后一个元素的最小值(Java)

题目链接

  • 3133. 数组最后一个元素的最小值

题目描述

给你两个整数 n 和 x 。你需要构造一个长度为 n 的 正整数 数组 nums ,对于所有 0 <= i < n - 1 ,满足 nums[i + 1] 大于 nums[i] ,并且数组 nums 中所有元素的按位 AND 运算结果为 x 。

返回 nums[n - 1] 可能的 最小 值。

示例 1:

输入:n = 3, x = 4

输出:6

解释:

数组 nums 可以是 [4,5,6] ,最后一个元素为 6 。

示例 2:

输入:n = 2, x = 7

输出:15

解释:

数组 nums 可以是 [7,15] ,最后一个元素为 15 。

提示:

1 <= n, x <= 108

求解思路

  • 数组中各项的值按&运算最后得到x,由于&运算两项都为1结果才是1,因此可以得出:数组nums中每一项的二进制位都包含x的二进制位(即x二进制位中取1的位置,任一数组元素在该位置都会取1)。
  • 因为数组nums递增,我们可以在x的二进制位为0的位置依次填入数字。例如第0项可以不做填入,第1项在最低为填入1。
  • 要找数组第n-1项的最小值,就相当于在x的0位置上填入n-1(如果0的位数不够就在前面补0)。
  • i表示x二进制表示的第i位,j表示n-1二进制表示的第j位。while循环直到把n-1全部填入为止。如果x的第i位为0,则将n-1的第j位填入。

实现代码

class Solution {public long minEnd(int n, int x) {--n; //填入的数值为n-1long ans = x;int i = 0, j = 0;while ((n >> j) > 0) {// 如果x的第i位是0if ((ans >> i & 1) == 0) {// 将n-1的第j位填入ans |= (long) (n >> j & 1) << i;j ++;}i ++;}return ans;}
}
http://www.lryc.cn/news/429822.html

相关文章:

  • FCARM - Output Name not specified, please check ‘Options for Target - Utilities‘解决方法
  • 自行车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化
  • 一文彻底搞懂Transformer - FFNN(前馈神经网络)
  • SpringCloud Gateway及 Springboot 服务 跨域配置
  • 【Solidity】安全与校验
  • 黑神话悟空四十二项修改器 v1.0
  • RM电控RTOS
  • Arduino开源四足蜘蛛机器人制作教程
  • 【Axure高保真原型】中继器表格——标签使用情况案例
  • ABAP字符串反转 and 寻找字符所在位置 and 根据数量汇总时把数量转为非数值类型
  • 【机器学习第十二章——计算学习理论】
  • Docker私人学习笔记
  • 谷粒商城实战笔记-233~235-商城业务-认证服务-单点登录流程-原理
  • 机器学习在旅游业的革新之旅
  • OpenCTI:开源网络威胁情报平台
  • linux shell 脚本 let 数学计算
  • mp3和mp4的区别是什么?怎么把mp3转成mp4?(全)
  • 合并params和query参数
  • [数据集][目标检测]工程机械车辆检测数据集VOC+YOLO格式3189张10类别
  • 构建域名服务器-BIND:Linux端的安装过程及配置文件详解
  • linux查询目录文件基础操作
  • 搭建TestBench,收藏这几条基本框架就够了
  • 怎么利用住宅代理提高数据抓取效率
  • c#中的ManuaResetEvent
  • EE trade:黄金投资的利弊与要点
  • 数据仓库模型评估的标准
  • 121231
  • 【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
  • 网络热门编程项目导学:黑马点评
  • 如何在本地和远程删除 Git 分支?