367. Valid Perfect Square
来源:互联网 发布:yunos删除预装软件 编辑:程序博客网 时间:2024/06/05 17:49
Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note: Do not use any built-in library function such as sqrt
.
Example 1:
Input: 16Returns: True
Example 2:
Input: 14Returns: False
思路1:由于不能使用sqrt()方法,所以 i 从1循环到 n/2,判断i的平方是否等于num,时间复杂度为O(n/2)
public boolean isPerfectSquare(int num) { int a = num / 2 + num % 2; //不知道能否使用 % for(int i = 1; i < a; i++) { if(i * i == num) return true; } return false; }
思路2:
1 = 1
4 = 1 + 3
9 = 1 + 3 + 5
16 = 1 + 3 + 5 + 7
………………………………
根据上面的规律,设置一个标志位,从1开始自增,每次加2,直到和num相等,时间复杂度O(sart(n))
public boolean isPerfectSquare(int num) { int i = 1; while(num > 0) { num -= i; i += 2; } return num == 0; }
思路3:二分法,时间复杂度O(logn),在时间复杂度上,O(logn) < O(sqrt(n))
public boolean isPerfectSquare(int num) { int l = 1; int r = num; while(l <= r) { long m = (l + r) >>> 1; // 注意,l + r可能超过int类型表示范围,>>>无符号右移 if(m * m == num) return true; else if(m * m < num) { l = (int)m + 1; }else { r = (int)m - 1; } } return false; }
阅读全文
0 0
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square**
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- 367. Valid Perfect Square
- Android activity 去掉标题栏的三种方法
- 并发编程总结
- WebStrom 2017激活
- 嵌入式工程师必须要懂的知识之-------上拉电阻与下拉电阻
- c语言知识结构
- 367. Valid Perfect Square
- GaLa Reinforcement v4.1 1CD
- 错误及其解决办法
- excel 在输入数据的时候,保证一列数据的唯一性
- 机器学习笔记1-k近邻算法的实现
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法
- 图的邻接矩阵表示及创建
- 记录一些用来学习设计模式的博客及书籍
- 多线程学习随记