خیلی خیلی سخته
باید توی leet code بری دسته دسته حل کنی ، و بهتره بعد از حل به ai هم بدی حل کنه شاید نکته ای یاد بگیری
ولی چند دسته کلی داره که من چیزایی که تجربه کردم رو می نویسم
به صورت کلی موارد زیر رعایت شه
-
حتما توی کامنت اولش لاجیک رو مرحله به مرحله بنویسیم تا هم اونا ببینن ، هم خودمون قاطی نکنیم
-
حتما موقع اجرا از debug استفاده شه
-
تا جای امکان از پکیج های اماده استفاده شه که به جواب حداقل برسیم
Array / String
حتما قبلش باید با مفاهیم زیر چند دقیقه کار کرد
- string
- slice
- buffer
- else if
- for i , j := 0,len(req); i < j-1; i, j = i+1, j-1
حتما از پکیج های آماده استفاده شه
-
strings.Join(words, ” ”)
-
strings.TrimSpace(s)
سر و تهش هر چی اسپیس باشه حذف می کنه
- strings.Fields(s)
اسپلیت می کنه
sliding window
اندازه ی پنجره ثابت
- ایندکس اولی رو حذف می کنیم ، ایندکسی که بیرونه رو میاریم تو و محاسبه می کنیم
k = طول پنجره
شاتباه رایج:
خطای ممکن اینه که یه اسلایس کوچولو مثل پنجره بسازیم و هر چی خواستیم مقایسه کنیم ، اون تو بریزیم
کار درست اینه ابتدا از ایندکس اول تا طول پنجره k ، محاسبه کنیم سپس یه حلقه بزاریم از ایندکس k شروع کنیم ، هر بار آخری رو از ابتدایی کم کنیم و ادامه بدیم
اندازه ی پنجره متغییر
- یه متغییر به نام راست داریم در حالی که از چپ شروع میشه
گاهی می گن آرایه ای باینری ، احتمالن می گن اگه یه ویندوز رو در نظر بگیریم که تا سقف ۳ تا صفر اجازه داشته باشه تو خودش نگه داره ، بیشترین طول پنجره چقد می تونه باشه
برای حلش اینکس ابتدایی و انتهایی از یه نقطه شروع میشن و تا زمانی که اینکس راست به سقف ۰ ها نرسه ، میتونه به طول پنجره بیفزایه اما اگه شد ۴ تا صفر ، چپ تا زمانی که به صفر نرسیده باید بیاد به سمت راست
۲ تا حلقه داره
حلقه بزرگه ایندکس راست حرکت می کنه
حلقه درونه در صورتی که ۴ تا صفر بشه فعال میشه
code chalange
- Problem-solving patterns
می توان سوال ها رو دسته بندی کرد و یه مدل برای حل چند مسعله پیدا کرد ، و این الگو ها موارد زیر هستند :
-
- Sliding Window
مساعلی که مجموع یا حاصل فانکشنالیتی یک range رو باید محاسبه کنیم
-
- Two Pointers
وقتی داریم آرایه پیمایش میکنیم ، گاهی نیاز است یک وریبل از ابتدای آرایه پیمایش کند ، و یکی از انتها در این حالت ، شاط های مورد نظر چک میشود و دوباره به سمتی حرکت میکنند ، به تکنیک در بسیاری از مسایل مرتبط به آرایه یا لینک لیست به کار میاد
-
- Fast and Slow Pointers
-
- Divide and Conquer
-
- Backtracking
-
- Dynamic Programming (DP)
-
- Depth-First Search (DFS) and Breadth-First Search (BFS)
-
- Greedy Algorithms
موارد بیشتر هم هستند ،