leetcodeには重複要素III(java)が存在する
6303 ワード
整数配列が与えられ、nums[i]とnums[j]の差の絶対値が最大tとなり、iとjの差の絶対値が最大tとなるように、配列に2つの異なるインデックスiとjがあるか否かが判断される.ķ.
例1:
入力:nums=[1,2,3,1],k=3,t=0出力:true例2:
入力:nums=[1,0,1,1],k=1,t=2出力:true例3:
入力:nums=[1,5,9,1,5,9],k=2,t=3出力:false
2回読んでやっと題意を理解して、つまり、配列の中で2つの異なる要素を探して、2人の数値の差はtにならないで、2人の配列の中のシーケンス番号の差はkにならないで暴力の循環を除いて、大物たちの構想を見て、全体は与えられた下のスケールの差の上限kで1つの“ウィンドウ”を設置して、それから配列を遍歴して、遍歴した数とウィンドウの中で比較して、えっ条件を満たす数が出たらtrue出力です.見つからない場合は、現在の数をウィンドウに入れ、ウィンドウが超過している場合は、最初にウィンドウの数のように削除すると、ウィンドウが配列の中で右に1つ移動し、常に下のスケール差が境界を越えないようにします.
例1:
入力:nums=[1,2,3,1],k=3,t=0出力:true例2:
入力:nums=[1,0,1,1],k=1,t=2出力:true例3:
入力:nums=[1,5,9,1,5,9],k=2,t=3出力:false
2回読んでやっと題意を理解して、つまり、配列の中で2つの異なる要素を探して、2人の数値の差はtにならないで、2人の配列の中のシーケンス番号の差はkにならないで暴力の循環を除いて、大物たちの構想を見て、全体は与えられた下のスケールの差の上限kで1つの“ウィンドウ”を設置して、それから配列を遍歴して、遍歴した数とウィンドウの中で比較して、えっ条件を満たす数が出たらtrue出力です.見つからない場合は、現在の数をウィンドウに入れ、ウィンドウが超過している場合は、最初にウィンドウの数のように削除すると、ウィンドウが配列の中で右に1つ移動し、常に下のスケール差が境界を越えないようにします.
class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
if(nums.length==0||k==0)return false;
Set<Integer> set= new HashSet<>();
for(int i=0;i<nums.length;i++){
// , , , , 。。。
if(t==0){
if(set.contains(nums[i])){
return true;
}
}else{
for(int num:set){
if(Math.abs((long)nums[i]-(long)num)<=t){
return true;
}
}
}
set.add(nums[i]);
if(set.size()>k){
set.remove(nums[i-k]);
}
}
return false;
}
}