532--陣列中的 k-diff 數對(技巧+感悟)
阿新 • • 發佈:2022-04-01
題目
給定一個整數陣列和一個整數 k,你需要在數組裡找到 不同的 k-diff 數對,並返回不同的 k-diff 數對 的數目。
這裡將 k-diff 數對定義為一個整數對 (nums[i], nums[j]),並滿足下述全部條件:
0 <= i < j < nums.length
|nums[i] - nums[j]| == k
注意,|val| 表示 val 的絕對值。
題解
點選檢視程式碼
package Com.Xu.DoublePointer; import java.util.HashMap; import java.util.Map; public class FiveThreeTwp { public static int findPairs(int[] nums, int k) { Map<Integer,Integer> map=new HashMap<>(); int times=0; // for(int i=0;i<nums.length;i++){ // if(map.containsKey(nums[i])){ // map.put(nums[i],map.get(nums[i])+1); // } // else { // map.put(nums[i],1); // } // } for (int i : nums) map.put(i,map.getOrDefault(i,0)+1); int res=0; if(k==0){ for (int i : map.values()) if(i>0) res++; } else { for (int i : map.keySet()) if(map.containsKey(i+k)) res++; } // for(int i=0;i<nums.length;i++){ // int num = Math.abs(nums[i] - k); // if(map.containsKey(num)){ // if(num==nums[i]){ // if(map.get(num)!=1){ // times++; // continue; // } // } // times++; // } // } // return times; return res; } public static void main(String[] args) { int [] nums=new int[]{3, 1, 4, 1, 5}; int k=2; System.out.println(findPairs(nums,k)); } }
思考
程式碼是越簡潔越好,像if語句如果沒有else用簡寫非常好看。
做題就需要技巧的,笨辦法也能解決,但是時間不可以行,所以做題是需要往技巧的方向發展的。
map的getorDefault方法非常好,所以以後要多用
分類討論是一個做題方法不是個技巧不要瞧不起,所以以後有什麼阻礙,先看看能不能先分類討論。
以後要拿出固定地時間來看別人地解法,即使是題目做對了