Tôi đang cố gắng tìm cách tối ưu hóa thuật toán của mình sao cho thời gian chạy là O (n²) (Ký hiệu Big O).Tối ưu hóa thời gian chạy của thuật toán
Dữ liệu nhập là một mảng có phần tử n, chỉ là số nguyên dương và âm. Chúng ta có thể giả định rằng mảng đã được sắp xếp.
Tôi phải xác định: cho mỗi r (phần tử của mảng), cho dù r = s + t, trong đó s và t cũng là phần tử của mảng, và có thể giống nhau (s == t) hoặc cũng không.
Tôi đã cố gắng giảm số lượng thành phần mà tôi phải kiểm tra bằng cách kiểm tra xem số hiện tại là dương hay âm, nhưng thời gian chạy vẫn còn quá dài. Vấn đề là tôi đang sử dụng 3 trong khi vòng lặp đã có nghĩa là một thời gian chạy của O (n³) cho trường hợp xấu nhất.
Đây là mã của tôi:
public static void Checker(int[] array) {
List<Integer> testlist = new ArrayList<Integer>();
int i = 0;
while (i < array.length) {
int current = array[i];
if (attached(current, array)) {
testlist.add(current);
}
i++;
}
}
public static boolean attached(int current, int[] array) {
boolean result = false;
int i = 0;
while (i < array.length && !result) {
int number1 = array[i];
int j = 0;
while (j < array.length && !result) {
int number2 = array[j];
if (number1 + number2 == current) {
result = true;
}
j++;
}
i++;
}
return result;
}
đây là bài tập về nhà – Snelfie
Thứ nhất, thêm tất cả các phần tử từ mảng vào HashSet, sau đó lặp qua s và t và kiểm tra nếu s + t được trình bày trong bộ của bạn. – x1Mike7x
Xin vui lòng không sử dụng định dạng mã như làm nổi bật, nó làm cho những điều rất khó đọc. –