Lintcode697-判斷是否為平方數之和
阿新 • • 發佈:2018-12-29
哈哈,這題網上竟然沒有找到答案,於是自己copy到VS裡面除錯了幾次終於AC了,不保證是最優的演算法,時間複雜度應該是O(nlogn),空間複雜度O(1)(迴圈裡面嵌套了一個二分查詢),萬一有人需要呢,分享一下~
終於會用二分查找了~class Solution { public: /* * @param : the given number * @return: whether whether there're two integers */ bool isSquare(int n) { if (n < 0) { return false; } if (n == 0) return true; int low = 1; int high = n; int mid = (low + high) >> 1; while (low <= high) { int temp = n / mid; if (mid == temp && n == mid * temp) { return true; } if (temp < mid) { high = mid - 1; } if (temp >= mid) { low = mid + 1; } mid = (low + high) >> 1; } return false; // fix me! } bool checkSumOfSquareNumbers(int num) { // write your code here if (num<0) return false; if (isSquare(num)) return true; for (int i = 1; i<=sqrt(num); i++) { int target = (num - i * i); if (!isSquare(target)) continue; int j = sqrt(num)+1; int mid = 0; while (i <= j) { mid = (i + j) / 2; if (sqrt(target)>mid) i = mid + 1; else if (sqrt(target)<mid) j = mid - 1; else return true; } if (mid != sqrt(target)) return false; else return true; } } };