进制转换求距离

进制转换问题

问题描述

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

思路

个人比较倾向于找到测试用例的二进制的1所在位置存储到数组中,再计算数组中相邻两个数字的差值找最大即可。

程序

public:
    int binaryGap(int n) {
        int cnt = 0, max = 0;
        int shuzu[36] = {0};
        for (int i = 0;n != 0;i++) {
            if (n & 1) {
                shuzu[cnt] = i;
                cnt++;
            }
            n >>= 1;
        }
        for (int i = 1;i < 36;i++) {
            if (shuzu[i] - shuzu[i - 1] > max) {
                if (shuzu[i] - shuzu[i - 1] < 0) {
                    max = shuzu[i - 1] - shuzu[i];
                }
                else {
                    max = shuzu[i] - shuzu[i - 1];
                }

            }
        }
        return max;
    }

代码解析

  1. 分配内存分别用来给数组和记录最大值
  2. 计算二进制数中1的位置,给数组
  3. 计算数组的相邻最值

版权声明:本文为qq_37473197原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。