המשימה
נתונה המחלקה Range — טווח, ולה שתי תכונות: low ו-high (שלמים, high >= low). מספר x "מוכל" בטווח אם low <= x <= high. נתונות שתי שרשרות: • lst1 — שרשרת של מספרים שלמים, **ממוינת בסדר עולה** • lst2 — שרשרת של טווחים, **ממוינת בסדר עולה** (ה-high של כל טווח קטן מה-low של הטווח שאחריו) כתוב פעולה isIncluded שמחזירה true אם **כל** מספר ב-lst1 מוכל באחד הטווחים ב-lst2. דוגמה שמחזירה true: lst1: -9 → -8 → -7 → 12 → 14 → 15 lst2: [-20,-10] → [-9,0] → [2,4] → [12,12] → [14,17] דוגמה שמחזירה false: lst1: 1 → 5 → 8 → 12 lst2: [-20,-10] → [-9,0] → [1,6] → [9,12] → [20,100] המספר 8 אינו מוכל באף טווח. הנחיות: • **זמן ריצה O(N)**, כאשר N הוא אורך השרשרת הארוכה. לולאה בתוך לולאה תיתן תשובה נכונה אבל לא תעמוד בדרישה. • רמז: שתי השרשרות ממוינות. התקדמו על שתיהן במקביל עם שני מצביעים, והחליטו בכל צעד את מי לקדם. • שתי השרשרות אינן null. [מערך] [טבלה] [מערך] [טבלה]
קוד הפתיחה
class Range {
private int low;
private int high;
public Range(int low, int high) { this.low = low; this.high = high; }
public int getLow() { return low; }
public int getHigh() { return high; }
public void setLow(int low) { this.low = low; }
public void setHigh(int high) { this.high = high; }
public String toString() { return "[" + low + "," + high + "]"; }
}
public class Main {
/** true אם כל מספר ב-lst1 מוכל באחד הטווחים ב-lst2. זמן ריצה O(N). */
public static boolean isIncluded(Node<Integer> lst1, Node<Range> lst2) {
// כתוב את הפתרון כאן
return false;
}
// ── עזר, לא חלק מהמשימה ──────────────────────────────────────────
public static Node<Integer> nums(int[] v) {
Node<Integer> h = null;
for (int i = v.length - 1; i >= 0; i--) h = new Node<Integer>(v[i], h);
return h;
}
public static Node<Range> ranges(int[][] v) {
Node<Range> h = null;
for (int i = v.length - 1; i >= 0; i--)
h = new Node<Range>(new Range(v[i][0], v[i][1]), h);
return h;
}
public static void main(String[] args) {
Node<Integer> a1 = nums(new int[]{-9, -8, -7, 12, 14, 15});
Node<Range> a2 = ranges(new int[][]{{-20,-10}, {-9,0}, {2,4}, {12,12}, {14,17}});
System.out.println(isIncluded(a1, a2)); // true
Node<Integer> b1 = nums(new int[]{1, 5, 8, 12});
Node<Range> b2 = ranges(new int[][]{{-20,-10}, {-9,0}, {1,6}, {9,12}, {20,100}});
System.out.println(isIncluded(b1, b2)); // false
Node<Integer> c1 = nums(new int[]{50});
Node<Range> c2 = ranges(new int[][]{{1,10}, {20,30}});
System.out.println(isIncluded(c1, c2)); // false — נגמרו הטווחים
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.