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