1 Public classSolution {2 PrivateSet<integer>visited;3 Publiclist<int[]> Ksmallestpairs (int[] nums1,int[] Nums2,intk) {4list<int[]> result =NewArraylist<>();5visited =NewHashset<>();6priorityqueue<int[]> queue =NewPriorityqueue<> (Newcomparator<int[]>() {7 @Override8 Public intCompareint[] A,int[] b) {9 return(Nums1[a[0]] + nums2[a[1])-(nums1[b[0]] + nums2[b[1]]);Ten } One }); AAdd (queue, nums1, NUMS2, 0, 0); - while(Queue.size () > 0 && result.size () <k) { - int[] current =Queue.poll (); theResult.add (New int[]{nums1[current[0]], nums2[current[1]]}); -Add (queue, nums1, NUMS2, current[0] + 1, current[1]); -Add (queue, nums1, NUMS2, current[0], current[1] + 1); - } + returnresult; - } + A Private voidAdd (priorityqueue<int[]> queue,int[] nums1,int[] Nums2,intN1,intn2) { at if(N1 < Nums1.length && N2 < nums2.length &&!visited.contains (N1 * nums2.length +n2)) { -Visited.add (N1 * nums2.length +n2); -Queue.offer (New int[] {n1, n2}); - } - } -}
Dijkstra algorithm
Find K Pairs with smallest Sum