Professional Documents
Culture Documents
;int temp
;]temp = arr[curr
;]arr[curr] = arr[j
arr[j] = temp;
{for (int i = 0; i < arr.length; i++)
) if (arr[i] == 1
; cnt++
}
ריצה עם שני אינדקסים אך עם לולאת whileיחידה (כדי שנוכל לעלות ולהוריד את הערכים
כרצוננו) ,שיטה מסובכת שמצריכה חשיבה מחוץ לקופסא אך נותנת לנו יעילות טובה עם טכניקה
גבוהה .בדרך כלל משמש במערך ממויין.
אינדקס בהתחלה ואינדקס בסוף ,מורידים את הסוף ומעלים את ההתחלה כל פעם לפי תנאי עד שהם
נפגשים.
דוגמא :מציאת תת מערך שסכומו 3במערך ממוין עולה ממש.
יעילות – n
; int sum = 0
{ for (int i = 0; i < arr.length; i++)
;] sum += arr[i
}
; int i = 0
; int j = arr.length -1
) while(i<j
{
) if(sum == 3
; break
) else if (sum < 3
{
;] sum -= arr[i
; i++
}
{ else
;] sum -= arr[j
; j--
}
}
;) System.out.println(i + " " + j
אינדקס iבהתחלה ואינדקס jמקום אחריו ,מעלים את jומעלים את iלפי תנאי מסוים .התת מערך
שאנחו יוצרים בין שני האינדקסים גדל כשמגדילים את jוקטן שמגדילים את מי שרודף אחריו – .i
דוגמא :מציאת תת מערך שסכומו 3במערך ממוין עולה ממש.
יעילות – n
; int i = 0
; int j = 1
;int sum = 0
) while(j<arr.len
{
) if(i == j
; j++
)if(sum == 3
; break
) else if (sum < 3
{
;] sum += arr[j
; j++
}
{ else
;] sum -= arr[i
; i++
}
}
;) System.out.println(i + " " + j
int j
{for (int i = 0; i < arr.length; i++)
for (j = i; j < arr.length; j++)
{
;)] System.out.println(arr[i] + " " + arr[j
}
}