【LeetCode】69. x 的平方根

解題思路

題目要求的是x的平方根,且只保留整數的部分,小數部分都被捨去
以x=8爲例,題目是 求最後1個小於2.828的正整數
這屬於“尋找有序序列中第一個滿足某條件的元素的位置”中的一類題目(所要求的的正整數就是位置),如果想要尋找最後一個滿足“條件C”的元素的位置,則可以先求第一個滿足“條件!C”的元素的位置,然後將該位置減1即可。
因此題目就變爲了 求第一個大於2.828的正整數 ,套用“求序列中第一個大於x的元素的位置”的二分查找模板即可

代碼

class Solution {
public:
	int mySqrt(int x) {
		if (x < 2) return x;//特殊情況
		int left = 1;
		int right = x;
		while (left < right)
		{
			long long mid = left + (right - left) / 2;//使用長整數,之後相乘有可能出現溢出
			if (mid*mid>x)//說明第一個大於x的位置一定在mid處或mid的左側
			{
				right = mid;//往左子區間[left,mid]查找
			}
			else//說明第一個大於等於x的元素的位置一定在mid+1處或mid+1的右側
			{
				left = mid + 1;//往右子區間[mid+1,right]查找
			}
		}
		return left-1;//返回夾出來的位置
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章