本題大意要我們在一個給定的nxm的矩形數組中找出符合條件的格子
條件如下:
? ? ? ? ? ? ? ?1.數值相同
? ? ? ? ? ? ? ?2.兩個橫坐標和縱坐標的差值相等(由此可得是一個對角線上的格子)
那么根據以上條件我們可以用HashMap來解決這個問題,統計對角線上數值相同的格子有幾個。
以下是代碼的實現:(getOrDefault解決數組中沒有這個key的情況。)記得輸出的時候乘2因為雙向統計
package 連連看;import java.util.HashMap;
import java.util.Scanner;public class Main {static int[][] a=new int[1001] [1001];static long result=0;static int n,m ;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n =scanner.nextInt();m =scanner.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <=m ; j++) {a[i][j]=scanner.nextInt();}}for (int i = 1; i <=n ; ++i) {//先處理從左上到右下角的對角線g_l(i,1);g_r(i,1);}for (int i = 2; i <=m ; ++i) {//先處理從左上到右下角的對角線g_l(1,i);g_r(n,i);}System.out.println(result*2);}static void g_l(int x, int y) {HashMap<Integer,Integer> hm=new HashMap<>();while (x<=n&&y<=m){result+=hm.getOrDefault(a[x][y],0);hm.put(a[x][y],hm.getOrDefault(a[x][y],0)+1);x++;y++;}}//從左下角到右上角的對角線static void g_r(int x, int y) {HashMap<Integer,Integer> hm=new HashMap<>();while (x>0&&y<=m){result+=hm.getOrDefault(a[x][y],0);hm.put(a[x][y],hm.getOrDefault(a[x][y],0)+1);x--;y++;}}
}