Đó là một cuộc thi mã Leet question mà tôi đang cố gắng thử sau khi cuộc thi kết thúc nhưng mã của tôi luôn vượt quá giới hạn thời gian. Câu hỏi làLàm thế nào để cải thiện hiệu suất của Leetcode 4sum-ii thách thức
Với bốn danh sách A, B, C, D của các giá trị số nguyên, tính toán bao nhiêu tuples (i, j, k, l) có là như vậy mà A [i] + B [j] + C [k] + D [l] bằng không.
Để làm cho vấn đề một chút dễ dàng hơn, tất cả A, B, C, D có cùng chiều dài của N trong đó 0 ≤ N ≤ 500.
Tất cả các số nguyên là trong khoảng -2 -2 - và kết quả được đảm bảo tối đa là 2 - 1.
Ví dụ:
Input:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]
Output:
2
Explanation:
The two tuples are:
1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0
Mã của tôi là
public static int FourSumCount(int[] A, int[] B, int[] C, int[] D)
{
int count = 0;
List<int> map1 = new List<int>();
List<int> map2 = new List<int>();
for (int i = 0; i < A.Length; i++)
for (int y = 0; y < B.Length; y++)
{
map1.Add(A[i] + B[y]);
map2.Add(C[i] + D[y]);
}
for (int i = 0; i < map2.Count(); i++)
{
for (int j = 0; j < map2.Count(); j++)
//if (map1.Contains(map2[i]*-1))
//{
// var newList = map1.FindAll(s => s.Equals(map2[i] * -1));
// count = count + newList.Count();
//}
if (map1[i] + map2[j] == 0)
{
count++;
}
}
return count;
}
được Có cách nào tốt hơn? Cảm ơn với sự mong đợi.
liên quan: [4sum] (http://stackoverflow.com/questions/11216582/4sum-implementation-in-java-from-leetcode) tương đương: [Tìm ba phần tử trong mảng được sắp xếp tổng hợp thành phần tử thứ tư] (http://stackoverflow.com/q/39719094/3789665) – greybeard