חידת LeetCode Solution - Minimum Cost to Equalize Array, פתרון ליטקוד, LeetCode Solution, לפתור שאלות ב LeetCode, מדעי המחשב, תכנות מחשבים, לעבוד בהייטק, ללמוד תכנות מחשבים, להיות מתכנת, ללמוד לתכנת, הכנה לראיון טכני, ראיון עבודה בהייטק, שאלות ליטקוד, פיתוח תוכנה, איך לכתוב קוד? ללמוד לכתוב קוד, חידות היגיון, ללמוד לחשוב, ללמוד לנתח דברים, ללמוד לפרק לגורמים, ללמוד לחלק לחלקים, ללמוד למצוא חוקיות, איך לחלק לחלקים? איך למצוא חוקיות? לנתח תהליכים... של מספרים. לדוגמה (2,3,3,3,5). עלינו לגרום לכל המספרים, להפוך להיות בערך של המספר הגדול ביותר שנמצא ברשימת המספרים. את זה ניתן לעשות באמצעות פעולה של הוספת הערך 1 לכל המספרים, ... פעמים את הערך 1, למספר 2, כדי להפוך את המספר 2 למספר 5. ובדוגמה הנל (2,3,3,3,5), המספר הגדול ביותר ברשימה, הוא 5 ולכן אנחנו נרצה להפוך את כל המספרים לערך 5, דהיינו, שבסוף התהליך ... הוספת הערך 1, לכל אחד מהמספרים, כדי שבסופו של תהליך, כל הערכים יהיו זהים לערך של המספר הגדול ביותר. את זה נעשה באמצעות פעולות ההוספה הבאות: (2+1+1+1, 3+1+1, 3+1+1, 3+1+1, 5). ... כך: שואלים אותנו: נותנים לנו רשימת מספרים. עלינו להגדיל את כל רשימת המספרים, אל המספר הגדול ביותר ברשימה. עלינו לעשות זאת באמצעות פעולת הוספה של הערך 1, לכל אחד מהמספרים, עד ... היינו יודעים איך לנתח את המצב הזה? תשובה: כנראה שכן. בתור התחלה, היינו מאתרים את המספר הגדול ביותר ברשימה. ואחר כך היינו מוספים את הערך 1 לכל אחד מהמספרים. היינו עושים זאת X פעמים, ... מעלה. ונעצור כאן לרגע וננתח את הנל. בעצם יש לנו כאן כמה שלבים. שלב 1 - איתור המספר הגדול ביותר ברשימה. שלצורך העניין ברשימה הנל המספר הגדול ביותר הוא 100. שלב 2 - לעבור על כל המספרים, ולבצע פעולה של 100 פחות הערך בכל מיקום. וכך ... יחסית ברורים. אני אציין ואומר, שבעצם יש לנו כאן במהות 2 תהליכים. 1 - איתור המספר הגדול ביותר. 2 - הגדלת כל המספרים וסכימה של הערכים וכולי. האם ניתן לבצע את 2 התהליכים האלו תוך כדי ריצה אחת על הרשימה, או שצריך בשלב 1 לעבור על כל הרשימה, כדי לאתר את המספר הגדול ביותר. ורק אחר כך בשלב 2 לבצע את פעולות ההגדלה, הסכימה, ההכפלה וכולי? אז לכאורה, אכן צריכים לרוץ על הרשימה, פעמיים. פעם ראשונה כדי לאתר את המספר הגדול ביותר. ורק אחר כך לעבור על כל הערכים להגדיל אותם וכולי. אבל זאת לא כל האמת. כי בפועל, ... לרוץ פעם אחת על כל הרשימה ולבצע בריצה אחת את הפעולות הבאות: 1 - לנסות לאתר כל המספר הגדול ביותר. 2 - באותה ריצה, לסכום את כל הערכים שיש לנו ברשימה. דהיינו, הערך במיקום 1 + הערך ... כמו שהם, בלי לבצע שום חישוב נוסף. בסוף ריצה אחת על כל הרשימה, נוכל לדעת מהו המספר הגדול ביותר. ואז מכך נוכל לבצע חישוב של: הערך הגדול ביותר, כפול כמות המספרים ברשימה. ואז נוכל ... לראות שבזמן ריצה O(N) ניתן לפתור את התרגיל הנל, כנל. שניתן בריצה אחת, לאתר את המספר הגדול ביותר ולפתור את הכל. ובעצם עד כה, לקחנו את השאלה המקורית וחילקנו אותה לחלקים. התחלנו ... הפעמים שניתן לבצע את פעולת ההגדלה הזאת? ואסביר: נשים רגע אחד בצד את תהליך איתור המספר הגדול ביותר. נשים רגע אחד בצד גם את תהליך החישוב של העלות של ביצוע פעולות ההגדלה. ננסה לחשוב ... אבל כרגע נחזור לנתח את השאלה המקורית. אז בעצם עד כה, היה לנו תהליך של למצוא את המספר הגדול ביותר. יש לנו גם תהליך של לחשב כמה פעמים נצטרך לבצע הגדלה של כל המספרים בכל פעם מספר ... כנל. אבל נניח שעלינו כן להשתמש כמה שיותר בהגדלות כפולות. אז נצטרך: 1 - לאתר את המספר הגדול ביותר. 2 - את המספר הקטן ביותר. 3 - אחכ נצטרך לחשב את הכמות של כל שאר ההגדלות שעלינו ...