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

免费动态图片素材网站毛坯房最便宜装修方法

免费动态图片素材网站,毛坯房最便宜装修方法,怎么做网站写书,wordpress+培训模板下载文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:连接连续二进制数字 出处:1680. 连接连续二进制数字 难度 5 级 题目描述 要求 给定一个整数 n \texttt{n} n,将 1 \text…

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:连接连续二进制数字

出处:1680. 连接连续二进制数字

难度

5 级

题目描述

要求

给定一个整数 n \texttt{n} n,将 1 \texttt{1} 1 n \texttt{n} n 的二进制表示连接得到一个二进制数,返回连接得到的二进制数对应的十进制数对 10 9 + 7 \texttt{10}^\texttt{9} + \texttt{7} 109+7 取余的结果。

示例

示例 1:

输入: n = 1 \texttt{n = 1} n = 1
输出: 1 \texttt{1} 1
解释:二进制的 "1" \texttt{"1"} "1" 对应十进制的 1 \texttt{1} 1

示例 2:

输入: n = 3 \texttt{n = 3} n = 3
输出: 27 \texttt{27} 27
解释:二进制下, 1 \texttt{1} 1 2 \texttt{2} 2 3 \texttt{3} 3 分别对应 "1" \texttt{"1"} "1" "10" \texttt{"10"} "10" "11" \texttt{"11"} "11"
将它们依次连接,得到 "11011" \texttt{"11011"} "11011",对应十进制的 27 \texttt{27} 27

示例 3:

输入: n = 12 \texttt{n = 12} n = 12
输出: 505379714 \texttt{505379714} 505379714
解释:连接结果为 "1101110010111011110001001101010111100" \texttt{"1101110010111011110001001101010111100"} "1101110010111011110001001101010111100",对应十进制的 118505380540 \texttt{118505380540} 118505380540
10 9 + 7 \texttt{10}^\texttt{9} + \texttt{7} 109+7 取余后,结果为 505379714 \texttt{505379714} 505379714

数据范围

  • 1 ≤ n ≤ 10 5 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{5} 1n105

解法

思路和算法

由于 1 1 1 n n n 的二进制表示的连接结果可能很长,因此需要在遍历连接结果的过程中计算结果。

初始时,连接结果是 0 0 0。当遍历到整数 i i i 时,假设 1 1 1 i − 1 i - 1 i1 的连接结果对应的整数是 x x x,整数 i i i 的二进制表示有 bits \textit{bits} bits 位,则 1 1 1 i − 1 i - 1 i1 的连接结果对应的整数是将 x x x 左移 bits \textit{bits} bits 位之后加 i i i。因此,只要知道 1 1 1 n n n 的每个整数的二进制表示的位数,即可得到连接的结果对应的整数。

如果正整数 x x x 2 2 2 的整数次幂,则 x x x 的二进制表示的位数比 x − 1 x - 1 x1 的二进制表示的位数多 1 1 1,这里规定 0 0 0 的二进制表示的位数是 0 0 0。正整数 x x x 2 2 2 的整数次幂等价于 x & ( x − 1 ) = 0 x ~\&~ (x - 1) = 0 x & (x1)=0,因此可以在 O ( 1 ) O(1) O(1) 的时间内判断一个整数是不是 2 2 2 的整数次幂。

由此可以得到如下解法。

num \textit{num} num 表示连接结果,用 bits \textit{bits} bits 表示当前整数的二进制表示的位数,初始时 num \textit{num} num bits \textit{bits} bits 都是 0 0 0。依次遍历从 1 1 1 n n n 的每个整数,对于整数 i i i,执行如下操作。

  1. 判断 i i i 是否是 2 2 2 的整数次幂。如果 i & ( i − 1 ) = 0 i ~\&~ (i - 1) = 0 i & (i1)=0,则 i i i 2 2 2 的整数次幂,将 bits \textit{bits} bits 1 1 1,否则 bits \textit{bits} bits 不变。此时 bits \textit{bits} bits i i i 的二进制表示的位数。

  2. num \textit{num} num 的值更新为 ( num < < bits ) + i (\textit{num} << \textit{bits}) + i (num<<bits)+i,并将更新后的值对 1 0 9 + 7 10^9 + 7 109+7 取余。

遍历结束之后, num \textit{num} num 即为 1 1 1 n n n 的二进制表示的连接结果对应的整数。

需要注意的是,由于 n n n 的最大值是 1 0 5 10^5 105,因此 bits \textit{bits} bits 的最大值是 17 17 17 nums < < bits \textit{nums} << \textit{bits} nums<<bits 的结果可能超出 32 32 32 位整数的范围。为了避免溢出,应将 num \textit{num} num 声明为 long \texttt{long} long 型,返回结果时转成 int \texttt{int} int 型。

代码

class Solution {public int concatenatedBinary(int n) {final int MODULO = 1000000007;long num = 0;int bits = 0;for (int i = 1; i <= n; i++) {if ((i & (i - 1)) == 0) {bits++;}num = ((num << bits) + i) % MODULO;}return (int) num;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是给定的整数。需要遍历 n n n 个整数,每个整数的操作时间都是 O ( 1 ) O(1) O(1)

  • 空间复杂度: O ( 1 ) O(1) O(1)

http://www.dtcms.com/a/552675.html

相关文章:

  • 家具网站设计方案营业执照注册官网
  • 吉林手机版建站系统价格遵义做网站建设哪家公司好
  • 重庆市建设执业资格注册管理中心网站鞍山网站建设制作
  • 拿自己爱人做网站做网站时网页中格式对不齐怎么办
  • 网站开发免责说明医疗网站建设行情
  • 网页设计公司建设网站网络营销基本含义
  • 白山网站建设公司无锡做网站 选众诺
  • 如何注册公司网站免费注册网站建设中图片
  • 网站建设的实践体会深圳网站定制价格表
  • 金融行业网站模板台州网站制作价格
  • 做网站界面尺寸是多少seo基础篇
  • 一个电商网站的网页制作建一个网站问谁
  • 冀州网站建设代理汕头网站建设推荐
  • 珠海医疗网站建设宣传海报用什么软件做
  • 做我的世界壁纸的网站五棵松网站建设
  • 东庄水利枢纽建设公司网站html5软件官方下载
  • 如何自建网站wordpress单栏主题 极简
  • 做网站的公司哪家最好手机网站和微信网站有哪些
  • 门户网站系统建设方案怎么建设国字形网站
  • 做网站用什么电脑配置东莞网站推广需要多少钱
  • 济南如何挑选网站建设公司设计图制作软件app手机
  • 手机网站底部电话代码兴义住房和城乡建设局网站
  • 做a 免费网站有哪些微信朋友圈营销方案
  • 建站优化系统查高铁建设进度官方网站
  • 初中做网站用什么软件男生做男生网站在那看
  • 北京网站设计联系方式做网站费用怎么付
  • 网站制作的重要性wordpress文章排版编辑器
  • 腾讯云网站建设教学视频网页快速开发平台
  • qq在线网站代码生成找网上公司做网站
  • 有做网站网站的么毕业设计网站可以做什么