平方數之和

2021-10-11 15:57:14 字數 1140 閱讀 4261

題目**

給定乙個非負整數c,你要判斷是否存在兩個整數ab,使得 a2 + b2 = c。

示例1:

輸入:5

輸出: true

解釋:1 * 1 + 2 * 2 = 5

示例2:

輸入: 3

輸出: false

方法一:二分查詢

從0到sqrt(c),每次確定乙個數i,在從i~sqrt(c)中查詢是否有j*j=c-i*i

注意:數字可以是0,兩個數字也可以相同

public boolean judgesquaresum(int c) 

}return false;

}public boolean binarysearch(long low,long high,int target)

long mid=(low+high)/2;

long s=mid*mid;

if(s==target) else if(s時間複雜度o(c1/2log2c1/2)方法二:sqrt()

public boolean judgesquaresum(int c)

}return false;

}

時間複雜度o(c1/2)方法三:雙指標

可以看成是在元素為 0~target 的有序陣列中查詢兩個數,使得這兩個數的平方和為 target,和上一題類似,只有乙個明顯區別:乙個是和為 target,乙個是平方和為 target。本題同樣可以使用雙指標得到兩個數,使其平方和為 target。

本題的關鍵是右指標的初始化,實現剪枝,從而降低時間複雜度。設右指標為 x,可以將 x 取為 sqrt(target)。

public boolean judgesquaresum(int c)  else if (sum < c)  else 

}return false;

}

時間複雜度o(c1/2)

633 平方數之和

給定乙個非負整數 c 你要判斷是否存在兩個整數 a 和 b,使得 a2 b2 c。示例1 示例2 可以看成是在元素為 0 target 的有序陣列中查詢兩個數,使得這兩個數的平方和為 target,如果能找到,則返回 true,表示 target 是兩個整數的平方和。本題和 167.two sum ...

平方數之和 雙指標)

題目描述 給定乙個非負整數 c 你要判斷是否存在兩個整數 a 和 b,使得 a2 b2 c。輸入測試資料由多組測試樣例組成。每組測試樣例第一行輸入乙個正整數 c 1 c 2147483647 資料約束 對於c 100000,每個測試檔案不超過1000組。對於100000 c 2147483647 每...

633 平方數之和

給定乙個非負整數 c 你要判斷是否存在兩個整數 a 和 b,使得 a2 b2 c 示例 1 輸入 c 5 輸出 true 解釋 1 1 2 2 5 示例 2 輸入 c 3 輸出 false 示例 3 輸入 c 4 輸出 true 示例 4 輸入 c 2 輸出 true 示例 5 輸入 c 1 輸出 ...