פורסם 2008 בפברואר 2317 שנים כתבו שיטה רקורסיבית שבודקת האם במערך יש רשימה של איברים עוקבים ,אם כן השיטה צריכה להחזיר את אורך הרשימה הארוכה ביותרכשתבתי את הקוד הבא, מה אני צריך להוסיף על מנת שהתשובה שתוחזר תיהיה האורך של הרשימה הארוכה ביותר?public class Func{ public static int func(int [] arr) // origianl method { return func(arr , 0 , arr.length-1); // overloading } private static int func( int [] arr , int lo ,int hi) { if(lo == hi) return 0; else if (arr[lo]+1 == arr[lo +1]) { return (1+func(arr , lo+1 , hi)); } else return func(arr , lo+1 , hi); }}
פורסם 2008 בפברואר 2317 שנים למה לא משהו כזה ? public static int func(int[] arr) { return func(arr, 0, 1, 0); } public static int func(int[] arr, int i, int cur, int longest) { if (arr[i] == arr[i + 1]) cur++; else cur = 1; if (cur > 1 && cur > longest) longest = cur; if (i == arr.length - 1) return longest; return func(arr, ++i, cur, longest); }
פורסם 2008 בפברואר 2517 שנים מחבר אם הידע שלי אני לא יכול לאשר עד כמה זה אלגנטי או לא ,אבל זה בהחלט יפה ואם להתבסס על צורת הרקורסיה שלי , איך אני בודק איזה רשימה ארוכה יותר ? ותודה על התשובה
פורסם 2008 בפברואר 2717 שנים בהתבסס על צורך הרקורסיה שלך, זה יחזיר את מספר האברים העוקבים הכולל במערך, ולא את הרשימה הכי ארוכה.
פורסם 2008 בפברואר 2717 שנים תיקון לפונקציה של exerciseיש שמה כמה בעיות צריך להעביר את הבדיקה של סוף המערך להתחלה וגם בדיקה של איבר עוקב צריך לכתוב if (arr[i]+1 == arr[i + 1])זהו בעיקרון זה ב C# אבן אין כמעט הבדל. public static int func(int[] arr) { return func(arr, 0, 1, 0); } public static int func(int[] arr, int i, int cur, int longest) { if (i == arr.Length - 1) return longest; if (arr[i]+1 == arr[i + 1]) cur++; else cur = 1; if (cur > 1 && cur > longest) longest = cur; return func(arr, ++i, cur, longest); }
פורסם 2008 בפברואר 2717 שנים את הקטע של האיבר עוקב, סתם טעות מפגרת שלא שמתי לב להגדרה.לגבי השינוי השני, בהתחלה כתבתי את הקוד כמוך, אבל שיניתי את זה (מבלי לבדוק האם הפתרון שלך או הנוכחי שלי נכונים).הסיבה לשינוי אצלי הוא הטעות שיהיה בריצה שלך באיבר האחרון (הוא לא יספר).
פורסם 2008 בפברואר 2717 שנים למה שלא יספר? cur מתחיל מ1. נגיד יש לנו 3 אברים עוקבים במערך בין 3 אברים. אז באיבר הראשון זה יעלה ל2, באיבר השני זה יעלה ל3, ובאיבר ה3 - 3 יזרק.מצד שני, הקוד שלך חשוף לarray out of bound exception במקרה והמערך בגודל 1.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.