二分查找367

162 阅读1分钟

题目描述

给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。

说明:不要使用任何内置的库函数,如 sqrt。

示例 1:


输入:16
输出:True
示例 2:

输入:14
输出:False

解法(java版):

解题描述:

1、m^2>4m 在m大于4的时候成立,二分时间复杂度O(logn) 2、第二种方法非二分时间复杂度O(n)

public class Title367 {

    public boolean isPerfectSquare(int num) {

        if (1 == num) {
            return true;
        }
        long low = 1;
        long high = num / 2;
        long mid;
        while (low <= high) {
            mid = low + (high - low) / 2;
            long result = mid * mid;
            if (result > num) {
                high = mid - 1;
            } else if (result < num) {
                low = mid + 1;
            } else {
                return true;
            }
        }

        return false;
    }

    public boolean isPerfectSquare2(int num) {

        if (1 == num) {
            return true;
        }
        for (int i = 1; i < num / 2; i++) {
            if (i * i == num) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(new Title367().isPerfectSquare(9));
    }
}

gain:

1、注意超过int值范围