در این مطلب، ویدئو پشته حداکثر فرکانس – Leetcode 895 – Python با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:14:23
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,000 –> 00:00:02,080
algomonster را با استفاده از پیوند موجود
2
00:00:02,080 –> 00:00:05,040
در توضیحات بررسی کنید و از code neat برای
3
00:00:05,040 –> 00:00:08,240
10 دسترسی مادام العمر استفاده کنید سلام به همه خوش
4
00:00:08,240 –> 00:00:09,920
آمدید و بیایید امروز چند کد دقیق تر بنویسیم،
5
00:00:09,920 –> 00:00:12,000
بنابراین امروز بیایید مشکل
6
00:00:12,000 –> 00:00:14,559
پشته فرکانس حداکثر را حل کنیم و من
7
00:00:14,559 –> 00:00:16,560
سعی می کنم بهترین کار را انجام دهم برای اینکه واقعاً فرآیند فکری را توضیح دهم که
8
00:00:16,560 –> 00:00:18,400
چگونه می توانید
9
00:00:18,400 –> 00:00:20,480
خودتان راه حل را پیدا کنید، من فکر می کنم
10
00:00:20,480 –> 00:00:22,240
این کار شدنی است حتی اگر کمی
11
00:00:22,240 –> 00:00:24,640
مشکل است، این یک مشکل کاملاً منحصر به فرد است،
12
00:00:24,640 –> 00:00:26,640
بنابراین به ما گفته شده است که یک پشته مانند
13
00:00:26,640 –> 00:00:28,320
ساختار داده طراحی کنیم، اما این کار باید انجام شود.
14
00:00:28,320 –> 00:00:29,599
از چند جهت متفاوت باشید منظورم این است
15
00:00:29,599 –> 00:00:30,720
که شبیه به این خواهد بود که ما
16
00:00:30,720 –> 00:00:33,120
عناصر را فشار می دهیم و عناصر را پاپ می کنیم،
17
00:00:33,120 –> 00:00:35,040
اینها در واقع تنها دو عملیاتی هستند
18
00:00:35,040 –> 00:00:37,840
که باید انجام دهیم، اما وقتی پاپ می کنیم
19
00:00:37,840 –> 00:00:40,160
، جدیدترین آنها را پاپ نمی کنیم. عنصر افزوده شده،
20
00:00:40,160 –> 00:00:42,719
عنصری را که
21
00:00:42,719 –> 00:00:45,920
اغلب اضافه میشود، باز میکنیم، اما همچنین اگر
22
00:00:45,920 –> 00:00:47,840
بین عنصری
23
00:00:47,840 –> 00:00:50,559
24
00:00:50,559 –> 00:00:53,920
که بیشترین تکرار
25
00:00:53,920 –> 00:00:56,320
را دارد، پیوندی وجود داشته باشد، آخرین عنصر اضافهشده را میزنیم، بنابراین اگر
26
00:00:56,320 –> 00:00:57,920
با متداول ترین عناصر
27
00:00:57,920 –> 00:01:00,239
مانند یک پشته مانند یک
28
00:01:00,239 –> 00:01:01,680
پشته معمولی عمل می کند، بنابراین اولین چیزی که
29
00:01:01,680 –> 00:01:03,600
ممکن است واقعاً امتحان کنید، اگرچه با
30
00:01:03,600 –> 00:01:06,240
فکر کردن به متداول ترین آنها احتمالاً اوهپ است،
31
00:01:06,240 –> 00:01:08,640
اما مسئله این است که وقتی
32
00:01:08,640 –> 00:01:10,960
عناصر را اضافه می کنیم، ممکن است همان عنصر را اضافه کنیم.
33
00:01:10,960 –> 00:01:13,520
چندین بار و سپس
34
00:01:13,520 –> 00:01:15,360
دنبال کردن آن با یک پشته برای به روز رسانی
35
00:01:15,360 –> 00:01:16,880
تعداد عناصر در یک پشته، سپس
36
00:01:16,880 –> 00:01:18,320
باید پشته را جستجو کنید و این
37
00:01:18,320 –> 00:01:19,759
واقعا کارآمد نیست، این چیزی نیست که یک
38
00:01:19,759 –> 00:01:22,000
پشته برای آن مفید است، اما ابتدا اجازه دهید فقط
39
00:01:22,000 –> 00:01:24,159
سعی کنیم بفهمیم که چه چیزی داریم.
40
00:01:24,159 –> 00:01:26,080
سعی کنید قبل از اینکه بفهمیم واقعاً چگونه آن را
41
00:01:26,080 –> 00:01:27,759
پیادهسازی میکنیم و
42
00:01:27,759 –> 00:01:29,920
بهترین راه برای انجام آن این است که همیشه به
43
00:01:29,920 –> 00:01:32,159
مثالهایی فکر کنید، فقط
44
00:01:32,159 –> 00:01:34,640
بیان مسئله را بخوانید و سعی نکنید حدس بزنید
45
00:01:34,640 –> 00:01:36,560
که در کدام ساختار دادهها باید انجام دهیم. از سعی کنید استفاده کنید
46
00:01:36,560 –> 00:01:38,479
تا در واقع چند مثال را مرور
47
00:01:38,479 –> 00:01:40,720
کنید و ببینید چه چیزی ممکن است کار کند و چه چیزی کار نمی
48
00:01:40,720 –> 00:01:42,880
کند، بنابراین بیایید بگوییم که ما یک دسته
49
00:01:42,880 –> 00:01:44,560
از عناصر را فشار می دهیم، فرض کنید که ما یک
50
00:01:44,560 –> 00:01:46,799
پنج را فشار می دهیم و یک دو را فشار می دهیم و داریم
51
00:01:46,799 –> 00:01:48,560
هل دادن یک actu متحد، بیایید
52
00:01:48,560 –> 00:01:51,360
آن یکی را به پنج تغییر دهیم، بنابراین اینها
53
00:01:51,360 –> 00:01:53,119
عناصری هستند که ما آنها را فشار می دهیم، یعنی من نمی دانم هنوز
54
00:01:53,119 –> 00:01:55,200
چگونه آنها را ذخیره می کنیم، اما
55
00:01:55,200 –> 00:01:56,880
شما می دانید که این جریان عناصری است
56
00:01:56,880 –> 00:01:59,600
که ما آنها را تحت فشار قرار دادیم، اکنون زمان آن رسیده است که ظاهر شوند. وقتی
57
00:01:59,600 –> 00:02:01,439
یک عملیات پاپ
58
00:02:01,439 –> 00:02:03,439
به ما داده میشود، مقداری به ما نمیدهند، میتوانید ببینید که خالی است،
59
00:02:03,439 –> 00:02:05,759
بنابراین باید بفهمیم که کدام عنصر
60
00:02:05,759 –> 00:02:07,840
را پاپ کنیم، این بخش سخت است، اکنون
61
00:02:07,840 –> 00:02:11,360
چیزی که واضح است این است که میخواهیم
62
00:02:11,360 –> 00:02:14,400
بدانیم بیشترین عنصر از کدام عنصر است. البته اینجا و
63
00:02:14,400 –> 00:02:17,200
آنجا ممکن است یک رابطه وجود داشته باشد، بنابراین در
64
00:02:17,200 –> 00:02:20,480
واقعیت ما میخواهیم فرکانس پرتکرارترین عنصر را بدانیم،
65
00:02:20,480 –> 00:02:23,120
بنابراین این
66
00:02:23,120 –> 00:02:25,120
چیزی است که میخواهیم بدانیم، من آن را
67
00:02:25,120 –> 00:02:26,959
تعداد متداولترین عنصر مینامم
68
00:02:26,959 –> 00:02:28,400
، چیزی که اکنون میخواهیم بدانیم.
69
00:02:28,400 –> 00:02:29,920
دقیقاً چگونه میخواهیم بفهمیم
70
00:02:29,920 –> 00:02:31,760
تعداد متداولترین عنصر
71
00:02:31,760 –> 00:02:34,959
چقدر است و مقادیری را اضافه میکنیم که در واقع میتوانیم
72
00:02:34,959 –> 00:02:37,840
تعداد هر مقداری را
73
00:02:37,840 –> 00:02:40,000
که تا کنون اضافه کردهایم ردیابی
74
00:02:40,000 –> 00:02:41,760
کنیم که واقعاً چیز عجیبی نیست.
75
00:02:41,760 –> 00:02:44,080
که در بسیاری از
76
00:02:44,080 –> 00:02:46,400
مشکلات ما نیستیم واقعاً خلاق هستیم،
77
00:02:46,400 –> 00:02:48,480
اما انجام درست آن بسیار آسان است،
78
00:02:48,480 –> 00:02:51,120
میتوانیم یک نقشه هش
79
00:02:51,120 –> 00:02:52,800
داشته باشیم که هر مقدار را شمارش هر مقدار میدانید
80
00:02:52,800 –> 00:02:54,560
و همچنین میتوانیم یک
81
00:02:54,560 –> 00:02:57,680
متغیر جداگانه برای داشتن حداکثر تعداد uh یا
82
00:02:57,680 –> 00:02:59,280
هر چیز دیگری داشته باشیم. حداکثر در
83
00:02:59,280 –> 00:03:01,440
هشمپ ما در آن نقطه، بنابراین
84
00:03:01,440 –> 00:03:03,680
ما نیز ماکزیمم واحد را دنبال
85
00:03:03,680 –> 00:03:05,680
می کنیم و می توانیم به
86
00:03:05,680 –> 00:03:08,159
راحتی آن را به روز کنیم، همانطور که می دانید یک مقدار اضافه می کنیم،
87
00:03:08,159 –> 00:03:10,159
اگر
88
00:03:10,159 –> 00:03:11,760
ببینیم که تعداد این
89
00:03:11,760 –> 00:03:13,920
از حداکثر ما بیشتر است، پس ما حداکثر تعداد را جایگزین می کنیم
90
00:03:13,920 –> 00:03:16,159
، بنابراین احتمالاً این
91
00:03:16,159 –> 00:03:18,319
بخش آسان بود، اما اکنون برای ظاهر کردن
92
00:03:18,319 –> 00:03:21,040
یک عنصر فرض کنید می دانیم که
93
00:03:21,040 –> 00:03:23,360
حداکثر تعداد یک مقدار در مقادیری
94
00:03:23,360 –> 00:03:26,080
که تا کنون اضافه کرده ایم، سه سمت راست است.
95
00:03:26,080 –> 00:03:28,080
این حداکثر تعداد است و ما می دانیم که از
96
00:03:28,080 –> 00:03:30,959
حداکثر متغیر ما و اکنون کاری که می خواهیم
97
00:03:30,959 –> 00:03:35,519
انجام دهیم این است که همه عناصر با
98
00:03:35,519 –> 00:03:38,480
تعداد سه را پیدا کنیم، بنابراین بیایید همه عناصر را
99
00:03:38,480 –> 00:03:40,239
با تعداد سه پیدا کنیم، فرض کنیم فعلاً می توانیم به صورت
100
00:03:40,239 –> 00:03:41,920
جادویی این کار را انجام دهیم.
101
00:03:41,920 –> 00:03:44,560
چگونگی پیاده سازی آن را پیدا خواهید کرد بعداً، بنابراین
102
00:03:44,560 –> 00:03:46,319
فقط یک مقدار با تعداد
103
00:03:46,319 –> 00:03:48,560
سه در حال حاضر وجود دارد و آن پنج است، بنابراین این
104
00:03:48,560 –> 00:03:50,799
کار برای ما بسیار آسان خواهد بود، ما فقط
105
00:03:50,799 –> 00:03:54,000
پنج را می زنیم بسیار خوب حالا فرض کنید می خواهیم
106
00:03:54,000 –> 00:03:57,599
دوباره پاپ کنیم و از آنجایی که این تنها
107
00:03:57,599 –> 00:04:00,400
عنصر با تعداد بود اکنون سه می
108
00:04:00,400 –> 00:04:03,120
دانیم که حداکثر تعداد ما کاهش می یابد
109
00:04:03,120 –> 00:04:05,200
زیرا این تنها
110
00:04:05,200 –> 00:04:08,000
عنصر با شمارش سه بود اکنون
111
00:04:08,000 –> 00:04:09,760
می دانیم که حداکثر تعداد ما
112
00:04:09,760 –> 00:04:12,400
به دو کاهش می یابد و
113
00:04:12,400 –> 00:04:14,720
مطمئناً می دانیم که دو خواهد شد زیرا حداقل می دانیم
114
00:04:14,720 –> 00:04:17,120
یک مقدار دو
115
00:04:17,120 –> 00:04:18,720
برابر مقداری که به تازگی وارد کرده بودیم نشان داده می شود
116
00:04:18,720 –> 00:04:20,720
زیرا قبلاً سه عدد پنج
117
00:04:20,720 –> 00:04:22,560
وجود داشت اکنون حداقل دو عدد
118
00:04:22,560 –> 00:04:24,560
پنج خواهد بود و البته ما
119
00:04:24,560 –> 00:04:26,720
تعداد پنج را در نقشه هشمپ خود نیز کاهش خواهیم داد، بنابراین
120
00:04:26,720 –> 00:04:29,360
اکنون می خواهیم پاپ کنیم. دوباره می دانیم که حداکثر
121
00:04:29,360 –> 00:04:33,280
تعداد ما 2 است و می خواهیم اکنون همه
122
00:04:33,280 –> 00:04:36,240
مقادیر را با تعداد 2 پیدا کنیم. بسیار خوب،
123
00:04:36,240 –> 00:04:38,479
فرض کنیم می توانیم به طور جادویی این کار را انجام
124
00:04:38,479 –> 00:04:42,320
دهیم، همه مقادیر را با تعداد دو به
125
00:04:42,320 –> 00:04:44,400
خوبی پیدا کردیم، اکنون متوجه می شویم که در واقع یک
126
00:04:44,400 –> 00:04:46,880
تساوی وجود دارد. چندتایی از آنها بنابراین
127
00:04:46,880 –> 00:04:49,919
فرض کنید ما als o می خواهید بدانید
128
00:04:49,919 –> 00:04:52,479
که این عناصر به ترتیب اضافه شده اند،
129
00:04:52,479 –> 00:04:54,720
فرض کنید این ترتیبی است
130
00:04:54,720 –> 00:04:56,160
مانند ترتیبی که آنها در این
131
00:04:56,160 –> 00:04:57,840
ترتیب هستند که همه مقادیر اضافه شده اند و
132
00:04:57,840 –> 00:04:59,919
بنابراین فرض کنید که ما آن ترتیب را داریم پس
133
00:04:59,919 –> 00:05:03,280
این دو هستند. مقادیر پنج و چهار ما
134
00:05:03,280 –> 00:05:04,800
می دانیم که این ترتیبی است که آنها
135
00:05:04,800 –> 00:05:07,520
اضافه شده اند که در کدام یک از آنها
136
00:05:07,520 –> 00:05:09,840
می خواهیم یکی را که اخیراً
137
00:05:09,840 –> 00:05:13,120
اضافه شده است باز کنیم، بنابراین در حال حاضر می خواهیم چهار
138
00:05:13,120 –> 00:05:15,759
را بزنیم بنابراین اکنون می توانیم تعداد
139
00:05:15,759 –> 00:05:18,240
چهار را از مقدار خود کم کنیم. hashmap اما در مورد
140
00:05:18,240 –> 00:05:20,639
حداکثر تعداد ما باید آن را کاهش دهیم،
141
00:05:20,639 –> 00:05:23,919
زیرا هنوز یک مقدار با تعداد دو عدد باقی مانده است
142
00:05:23,919 –> 00:05:26,560
، بنابراین نیازی به
143
00:05:26,560 –> 00:05:28,800
کاهش حداکثر تعداد خود نداریم و حالا اگر
144
00:05:28,800 –> 00:05:30,479
دوباره ظاهر می شدیم، می دیدیم که خوب است
145
00:05:30,479 –> 00:05:32,880
فقط یک مقدار تعداد دو عدد دارد که میتوانیم
146
00:05:32,880 –> 00:05:35,360
آن را باز کنیم و سپس در آن مرحله
147
00:05:35,360 –> 00:05:37,600
ما حداکثر تعداد خود را دوباره یک بار کاهش میدهیم و
148
00:05:37,600 –> 00:05:39,440
حالا فرض کنید میخواهیم حتی یک
149
00:05:39,440 –> 00:05:41,440
بار دیگر پاپ کنیم تا همه چیز در آن فرو برود،
150
00:05:41,440 –> 00:05:44,240
سپس همه عناصر را با
151
00:05:44,240 –> 00:05:46,800
تعداد یک به این دلیل که ما حساب خود را از آن کاهش می دهیم
152
00:05:46,800 –> 00:05:49,280
اکنون دو به یک همه عناصر را
153
00:05:49,280 –> 00:05:52,320
با شمارش یک دریافت میکنیم، چهار مورد از آنها وجود دارد،
154
00:05:52,320 –> 00:05:55,039
درست هر چهار عنصر باقی مانده است که
155
00:05:55,039 –> 00:05:57,840
منطقی است و این ترتیبی است که
156
00:05:57,840 –> 00:06:00,080
آنها اضافه شدهاند، بنابراین ما میخواهیم
157
00:06:00,080 –> 00:06:02,560
جدیدترین موردی را که میخواهیم پاپ کنیم
158
00:06:02,560 –> 00:06:05,039
ما حداکثر تعداد خود را کاهش
159
00:06:05,039 –> 00:06:06,720
نمیدهیم زیرا هنوز عناصری با تعداد یک باقی مانده است
160
00:06:06,720 –> 00:06:09,360
، بنابراین
161
00:06:09,360 –> 00:06:10,720
یکی دیگر را میزنیم، این یکی را که
162
00:06:10,720 –> 00:06:12,400
اخیراً اضافه شده است، دوباره اضافه میکنیم.
163
00:06:12,400 –> 00:06:14,479
و مجدداً
164
00:06:14,479 –> 00:06:16,160
جدیدترین اضافه شده را باز می کنیم و در نهایت
165
00:06:16,160 –> 00:06:18,080
می توانیم حداکثر شمارش معکوس خود را به صفر کاهش دهیم،
166
00:06:18,080 –> 00:06:20,560
بنابراین آیا
167
00:06:20,560 –> 00:06:22,800
الگو یا ایده را در اینجا می بینید،
168
00:06:22,800 –> 00:06:25,440
واقعاً خوب خواهد بود اگر بتوانیم مقادیر را
169
00:06:25,440 –> 00:06:28,240
بر اساس تعداد آن ها جدا کنیم. مقادیر، بنابراین
170
00:06:28,240 –> 00:06:31,440
ما همه مقادیر را با تعداد سه
171
00:06:31,440 –> 00:06:35,440
داریم، همه مقادیر را با تعداد دو
172
00:06:35,440 –> 00:06:37,919
داریم و همه مقادیر را با تعداد یک از
173
00:06:37,919 –> 00:06:38,800
174
00:06:38,800 –> 00:06:41,199
هم جدا کرده ایم و ما این کار را به
175
00:06:41,199 –> 00:06:43,680
نوعی خلاقانه انجام می دهیم، درست است زیرا
176
00:06:43,680 –> 00:06:46,479
پنج سه اتفاق می افتد. بارها اما
177
00:06:46,479 –> 00:06:49,680
من یک پنج را از یک گروه
178
00:06:49,680 –> 00:06:52,880
یک فی جدا کرده ام در یک گروه دو نفره و یک پنج
179
00:06:52,880 –> 00:06:55,360
در یک گروه سه تایی، بنابراین روشی که قرار
180
00:06:55,360 –> 00:06:57,840
است این را نگاشت کنیم
181
00:06:57,840 –> 00:07:01,840
، تعداد یک مقدار را به
182
00:07:01,840 –> 00:07:04,960
گروهی از مقادیر با همان تعداد به
183
00:07:04,960 –> 00:07:07,680
این روش خلاقانه نگاشت خواهیم کرد. درست است اما از چه
184
00:07:07,680 –> 00:07:09,680
ساختار داده ای باید برای آن
185
00:07:09,680 –> 00:07:11,680
گروه استفاده کنیم بهترین راه احتمالاً
186
00:07:11,680 –> 00:07:14,400
استفاده از یک لیست است زیرا می خواهیم
187
00:07:14,400 –> 00:07:16,400
ترتیب را درست حفظ کنیم توجه کنید که چگونه این
188
00:07:16,400 –> 00:07:18,240
گروه بنفش که می خواهیم ترتیب
189
00:07:18,240 –> 00:07:20,319
نارنجی بودن آنها را
190
00:07:20,319 –> 00:07:23,440
ح