ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[Java/LeetCode]算法练习:二进制间距(868/simple)

2022-04-24 19:01:10  阅读:149  来源: 互联网

标签:868 Java 二进制 simple 游标 int startIndex currentIndex 跨步


1 题目描述

题目来源: https://leetcode-cn.com/problems/binary-gap/

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。

如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

2 解题思路与代码

2.1 原始解决方法

2.1.1 思路

  • step0 边界条件: 10^9 < int型(Java)的最大值(21,4748,3647)
  • step1 Int型输入参数n转二进制字符串binaryStr
方法1:可利用Java基本数据类型包装类的内置函数 dataType.toBinaryString(val)
方法2:手写进制转码程序
  • step2 设置2个对binaryStr从左到右遍历的游标startIndexcurrentIndex,并最终筛选出【最大跨步长度值】maxLengthValue
startIndex(开始游标): 跨步的开始下标
  向后滑动/变更的条件:当前的【跨步(Gap)】刚计算完成时: 即 currentIndex(endIndex) 遇到 1 的时候

currentIndex(当前游标):不停向后滑动的游标 or 作为跨步的结束下标

2.1.2 源码(Java)

class Solution {
    public int binaryGap(int n) {
        String binaryStr = Integer.toBinaryString(n);// int 转 二进制字符串

        int maxLengthValue = -1;//[结果字段] 字符串Gap的最大长度值(初始值: 0 or -1)
        int strLength = strLength=binaryStr.length(); // 字符串长度
        int startIndex = 0;//开始游标。向后滑动/变更的条件:当前的【跨步(Gap)】刚计算完成时: 即 currentIndex(endIndex) 遇到 1 的时候
        int currentIndex = 0;//当前游标。

        while(currentIndex<strLength){
            if(binaryStr.charAt(currentIndex) == '1') {
                maxLengthValue = (currentIndex-startIndex)>maxLengthValue?(currentIndex-startIndex):maxLengthValue;
                startIndex = currentIndex;
            }
            currentIndex++;//向后滑动
        }
        return maxLengthValue;
    }
}

内存消耗太高,估计是: Integer.toBinaryString(xx) 函数所致

X 参考文献

标签:868,Java,二进制,simple,游标,int,startIndex,currentIndex,跨步
来源: https://www.cnblogs.com/johnnyzen/p/16187186.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有