一简单的算法题目,欢迎大家提出更高效的解决办法.................

xiaoxiao2021-03-01  12

今天参加某公司的面试,笔试有一简单的算法题目,答题速度慢,

刚要解答的时候,面试官来了,就没写,现在写在这里,和大家讨论下!

题目:给定一个整数num,判断这个整数是否是2的N次方

比如,2,4,8是2的那次方,6,10不是2的N次方

我的解决方法:

感谢undefined 提出2的0次方等有1的问题,现已修正!

1)不断的循环temp=2*2*2*2......*2,当某次temp==num是可确定是2的N次方,

public static bool Check1( int num) { int i = 1 ; while ( true ) { if (i > num) return false ; if (i == num) return true ; i = i * 2 ; } }

  2)不断的循环num%2,如果不等于0,return false,如果等于0,num=num/2,一直做到num=1

public static bool Check2( int num) { if (num == 1 ) return true ; else { do { if (num % 2 == 0 ) num = num / 2 ; else return false ; } while (num != 1 ); return true ; } }

其实这两种算法的思路都是相同的,但是第二种相对第一种更高效写,因为如果不是2的N次方,可以少循环很多次!

大家有更高效的算法请赐教!

转载请注明原文地址: https://www.6miu.com/read-3200036.html

最新回复(0)