Middle
ArrayList қолданылып жасалған тізімнің ортасынан бірнеше көршілес элементтерді жою үшін тиімді алгоритм ұсыныңыз.
sobes.tech AI
AI-дан жауап
Ең тиімді әдіс - ArrayList ортасынан бірнеше көршілес элементтерді жою үшін removeRange әдісін пайдалану.
import java.util.ArrayList;
import java.util.List;
public class ArrayListRemoveExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println("Бастапқы тізім: " + list);
int startIndex = 3; // Бастапқы индекс (қосу)
int endIndex = 6; // Соңғы индекс (шамамен)
((ArrayList<Integer>) list).removeRange(startIndex, endIndex); // startIndex-ден endIndex-ке дейінгі элементтерді жою
System.out.println("Элементтері жойылғаннан кейінгі тізім: " + list);
}
}
removeRange әдісі ArrayList класының қорғалған (protected) әдісі болғандықтан, оны пайдалану үшін коллекцияны нақты ArrayList типіне түрлендіру қажет. Бұл әдіс элементтерді жылжыту бойынша ең тиімді жүзеге асырылады.
ArrayList-тің ортасынан k элементін жою операциясының күрделілігі O(n-i) құрайды, мұнда n - тізімнің өлшемі, ал i - жоюдың бастапқы индексі. removeRange элементтерді бір өту арқылы жылжытады. Әрбір жойылатын элемент үшін remove(int index) әдісін қайта қолдану күрделілігін O(k * (n-i)) дейін арттырады, бұл тиімді емес.