[leetcode] 367. Valid Perfect Square
来源:互联网 发布:半岛雪人 mac 编辑:程序博客网 时间:2024/06/03 13:33
Question:
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
Solution 1:
首先尝试暴力求解,时间复杂度是O(n),发现超时。然后想着用二分,发现还是超时,最后用了一个O(根号n)的方法就过了。
但是二分是O(logn)啊,比O(根号n)要好,但是却超时,我又把下面O(根号n)的代码中的i <= num/i
改为了i*i <= num
发现就超时了,这只能说明除法的效率比乘法高或者两个较小的数比较大小比两个较大的数比较大小效率要高,或者还有其他原因?
class Solution {public: bool isPerfectSquare(int num) { if (num < 0) return false; if (num == 0 || num == 1) return true; for (int i = 1; i <= num / i; i++) { if (i * i == num) return true; } return false; }};
Solution 2:
这个是从网上找的一个O(1)的方法,简直丧心病狂。原理还是没看懂。那个i
更是不知道怎么得来的。
附上一个相关的连接。
https://en.wikipedia.org/wiki/Fast_inverse_square_root
class Solution {public: bool isPerfectSquare(int num) { if (num < 0) return false; int root = floorSqrt(num); return root * root == num; } int32_t floorSqrt(int32_t x) { double y=x; int64_t i=0x5fe6eb50c7b537a9; y = *(double*)&(i = i-(*(int64_t*)&y)/2); y = y * (3 - x * y * y) * 0.5; y = y * (3 - x * y * y) * 0.5; i = x * y + 1; return i - (i * i > x); }};
阅读全文
0 0
- LeetCode 367. Valid Perfect Square
- Leetcode 367. Valid Perfect Square
- [leetcode] 367. Valid Perfect Square
- [leetcode]367. Valid Perfect Square
- LeetCode - 367. Valid Perfect Square
- leetcode 367. Valid Perfect Square
- leetcode.367. Valid Perfect Square
- leetcode 367. Valid Perfect Square
- [leetcode] 367. Valid Perfect Square
- LeetCode 367. Valid Perfect Square
- Leetcode 367. Valid Perfect Square
- 【LeetCode】 367. Valid Perfect Square
- [LeetCode]367. Valid Perfect Square
- LeetCode 367. Valid Perfect Square
- LeetCode-367. Valid Perfect Square
- 【Leetcode】367. Valid Perfect Square
- [leetcode]367. Valid Perfect Square
- LeetCode 367. Valid Perfect Square
- HDU 1003 Max Sum Java
- 使用Unicode字符集出现的错误总结
- 鼠标右键事件
- css 字体样式设置大全
- Error:Execution failed for task :app:transformClassesWithInstantRunForDebug解决方案
- [leetcode] 367. Valid Perfect Square
- c++虚函数
- lintOptions引起的Execution failed for task ':mobile:lint'.编译错误
- C# 多态典型练习题
- C语言实现一个数的二进制位模式从左到右翻转后的值
- 深度学习——提高网络性能(一)
- HDU 6092 Rikka with Subset(思维)
- Java实现CORS跨域请求
- 真正一键开启PPTP、L2TP两种VPN服务,经测试兼容centos 6 7 、ubuntu 14 16、debian 8,32位64位,一次爽到底!