در این مطلب، ویدئو Move Zeroes – Leetcode 283 – Python با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:09:06
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
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,080
10 دسترسی مادام العمر استفاده کنید سلام، همه خوش
4
00:00:08,080 –> 00:00:10,240
آمدید به دوز روزانه کد منظم خود بازگردید، بنابراین
5
00:00:10,240 –> 00:00:12,799
بیایید امروز مشکل را حل کنیم، به صفر برسیم،
6
00:00:12,799 –> 00:00:15,360
بنابراین در حالی که این یک مشکل آسان است،
7
00:00:15,360 –> 00:00:17,840
یک مشکل بسیار خوب است. برای یادگیری برخی
8
00:00:17,840 –> 00:00:19,600
از ترفندهای اساسی
9
00:00:19,600 –> 00:00:22,000
برای حل مسائل سخت تر، بنابراین به
10
00:00:22,000 –> 00:00:25,359
ما آرایه ای از اعداد داده می شود و می خواهیم
11
00:00:25,359 –> 00:00:29,199
تمام صفرهای موجود در این آرایه را به سمت راست آرایه تا انتها به
12
00:00:29,199 –> 00:00:31,199
13
00:00:31,199 –> 00:00:34,399
سمت راست حرکت دهیم و در عین حال حفظ کنیم.
14
00:00:34,399 –> 00:00:37,360
ترتیب نسبی همه عناصر دیگر
15
00:00:37,360 –> 00:00:39,520
که اکنون صفر نیستند،
16
00:00:39,520 –> 00:00:41,440
ممکن است اولین غریزه شما برای این مشکل باشد، بنابراین
17
00:00:41,440 –> 00:00:42,719
اجازه دهید فقط به این مثال نگاهی بیندازیم،
18
00:00:42,719 –> 00:00:44,399
خوب، ما در اینجا تعدادی صفر
19
00:00:44,399 –> 00:00:47,520
داریم، اما تعدادی غیر صفر نیز داریم. سه
20
00:00:47,520 –> 00:00:49,840
و دوازده ساده ترین راه این
21
00:00:49,840 –> 00:00:53,280
است که دو آرایه درست بخوانیم از طریق
22
00:00:53,280 –> 00:00:55,840
هر مقدار در ورودی، بنابراین وقتی
23
00:00:55,840 –> 00:00:57,760
به صفر رسیدیم می توانیم آن را در یکی
24
00:00:57,760 –> 00:00:59,920
از آرایه ها قرار دهیم و وقتی به مقدار غیر صفر
25
00:00:59,920 –> 00:01:02,239
مانند یک رسیدیم قرار دادن که i n آرایه دیگر
26
00:01:02,239 –> 00:01:04,400
و بنابراین یک صفر دوم می گیریم و
27
00:01:04,400 –> 00:01:06,799
آن را در آرایه قرار می دهیم سپس یک سه را می بینیم
28
00:01:06,799 –> 00:01:08,479
که آن را در این آرایه قرار می دهیم و سپس یک
29
00:01:08,479 –> 00:01:10,640
12 می بینیم و آن را اینجا قرار می دهیم و سپس می
30
00:01:10,640 –> 00:01:12,720
دانید که ما اساساً آنها را در دو قسمت قرار می دهیم.
31
00:01:12,720 –> 00:01:14,479
آرایههای جداگانه اکنون میتوانیم آرایهها را ترکیب
32
00:01:14,479 –> 00:01:16,080
کنیم البته میخواهیم این صفرها را بگیریم
33
00:01:16,080 –> 00:01:18,400
و سپس آنها را به انتهای آرایه اضافه کنیم
34
00:01:18,400 –> 00:01:20,479
، زیرا این همان چیزی است که
35
00:01:20,479 –> 00:01:22,479
میخواهیم خروجی در واقع به نظر برسد که
36
00:01:22,479 –> 00:01:24,799
ترتیب نسبی
37
00:01:24,799 –> 00:01:27,840
عناصر غیر صفر را نیز حفظ کردهایم. همانطور که می بینید، اما
38
00:01:27,840 –> 00:01:30,479
مشکل این است که ما از حافظه اضافی استفاده می
39
00:01:30,479 –> 00:01:32,560
کنیم زمانی که دو آرایه مجزا ایجاد کردیم، اما
40
00:01:32,560 –> 00:01:35,840
آیا واقعاً می توانیم این ایده را دنبال کنیم که
41
00:01:35,840 –> 00:01:38,560
می دانید پارتیشن بندی این مقادیر
42
00:01:38,560 –> 00:01:41,119
بدون ایجاد دو آرایه جداگانه، آیا می
43
00:01:41,119 –> 00:01:43,280
توانیم آن را در جای خود انجام دهیم زیرا
44
00:01:43,280 –> 00:01:45,119
واقعاً مشکل همین است. از ما میخواهد انجام
45
00:01:45,119 –> 00:01:47,759
دهیم آیا میتوانیم این کار را با یک حافظه اضافی انجام دهیم و
46
00:01:47,759 –> 00:01:50,240
بله میتوانید و اگر
47
00:01:50,240 –> 00:01:52,960
با الگوریتمی به نام مرتبسازی سریع یا حتی
48
00:01:52,960 –> 00:01:55,439
انتخاب سریع آشنا هستید، احتمالاً
49
00:01:55,439 –> 00:01:58,560
با نحوه پارتیشن بندی مقادیر uh در جای
50
00:01:58,560 –> 00:02:00,880
خود آشنا هستید. الگوریتم یون را می توان
51
00:02:00,880 –> 00:02:02,960
تعمیم داد در این مورد
52
00:02:02,960 –> 00:02:05,040
ما مقادیر 0 و غیر صفر را انجام می دهیم می توانیم بگوییم
53
00:02:05,040 –> 00:02:08,160
که می دانید هر مقدار بزرگتر از 5 وارد می شود
54
00:02:08,160 –> 00:02:10,160
شما یک طرف آرایه را می شناسید و هر
55
00:02:10,160 –> 00:02:11,840
مقدار کمتر از 5 در طرف دیگر می رود
56
00:02:11,840 –> 00:02:13,280
درست ما می توانیم نکات مثبت و
57
00:02:13,280 –> 00:02:15,040
منفی را انجام دهیم، میتوانیم آن را به هر
58
00:02:15,040 –> 00:02:16,959
طریقی که میخواهیم پارتیشن بندی کنیم، اما در این مورد ما
59
00:02:16,959 –> 00:02:19,440
آن را بر اساس مقادیر صفر و غیرصفر انجام میدهیم
60
00:02:19,440 –> 00:02:21,040
و دلیل اینکه میگویم این مشکل در حالی
61
00:02:21,040 –> 00:02:22,560
که آسان است، یادگیری برخی از
62
00:02:22,560 –> 00:02:24,480
ترفندهای اساسی خوب است، این است که
63
00:02:24,480 –> 00:02:26,800
روشی که آنها این مشکل را بیان کردند در واقع
64
00:02:26,800 –> 00:02:28,959
فکر می کنم عمدا سعی دارند
65
00:02:28,959 –> 00:02:30,959
شما را کمی گیج کنند، آنها به شما می گویند که
66
00:02:30,959 –> 00:02:33,599
تمام صفرها را به انتهای آرایه
67
00:02:33,599 –> 00:02:36,400
سمت راست آرایه منتقل کنید، اما آنها
68
00:02:36,400 –> 00:02:38,239
می توانستند آن را برعکس بیان
69
00:02:38,239 –> 00:02:41,440
کنند. گفته اند همه مقادیر غیر صفر
70
00:02:41,440 –> 00:02:44,160
را به سمت چپ آرایه به
71
00:02:44,160 –> 00:02:46,239
سمت راست منتقل کنید زیرا هر دوی این دستورات
72
00:02:46,239 –> 00:02:48,879
معادل هستند اگر همه غیر صفرها را
73
00:02:48,879 –> 00:02:51,120
به سمت چپ منتقل کنیم، به طور پیش فرض
74
00:02:51,120 –> 00:02:53,120
صفرها را در سمت راست خواهیم
75
00:02:53,120 –> 00:02:55,280
داشت. این در واقع است
76
00:02:55,280 –> 00:02:56,640
کاری که میخواهیم انجام دهیم، این مشکل را در نظر میگیریم و به
77
00:02:56,640 –> 00:02:58,879
نوعی معکوس میکنیم که به
78
00:02:58,879 –> 00:03:00,640
آن نگاه میکنیم، مشکل مخالف را حل میکنیم
79
00:03:00,640 –> 00:03:02,480
که همچنان نتیجه مورد نظر را به ما میدهد،
80
00:03:02,480 –> 00:03:04,959
بنابراین این آرایه ورودی است
81
00:03:04,959 –> 00:03:06,480
که ما داریم اکنون داده شده
82
00:03:06,480 –> 00:03:08,480
در حالی که ما می خواهیم این کار را در جای خود انجام دهیم، می خواهم به این نکته
83
00:03:08,480 –> 00:03:11,120
توجه کنید
84
00:03:11,120 –> 00:03:12,480
که در این مورد ما از قبل می دانیم که
85
00:03:12,480 –> 00:03:14,159
دو صفر وجود دارد، بنابراین می خواهم
86
00:03:14,159 –> 00:03:16,000
به این بخش از
87
00:03:16,000 –> 00:03:17,440
آرایه این دو مورد آخر توجه کنید زیرا ما می دانیم
88
00:03:17,440 –> 00:03:18,879
که اینجا جایی است که صفرها به پایان
89
00:03:18,879 –> 00:03:20,560
می رسند و سه مورد اول جایی است
90
00:03:20,560 –> 00:03:22,400
که غیرصفرها به پایان می رسند، بنابراین می
91
00:03:22,400 –> 00:03:24,159
دانید که به نوعی مانند ما دو
92
00:03:24,159 –> 00:03:26,720
آرایه مجزا داریم اما ما این کار را
93
00:03:26,720 –> 00:03:28,959
با حافظه انجام می دهیم. که ما داریم، اما
94
00:03:28,959 –> 00:03:30,640
چگونه می توانیم این را پارتیشن بندی کنیم و همچنان
95
00:03:30,640 –> 00:03:32,080
نظم نسبی این
96
00:03:32,080 –> 00:03:35,440
مقادیر را حفظ کنیم، بسیار ساده است، ما می
97
00:03:35,440 –> 00:03:38,400
دانیم مقادیر غیر صفر که یک دو سه عدد از
98
00:03:38,400 –> 00:03:41,360
آنها داریم، همه آنها به این
99
00:03:41,360 –> 00:03:43,360
بخش از این سه
100
00:03:43,360 –> 00:03:45,840
موقعیت را درست آرایه کنید، کاری که میخواهیم انجام دهیم این است
101
00:03:45,840 –> 00:03:48,319
که یک نشانگر داشته باشیم اکنون که اولین
102
00:03:48,319 –> 00:03:50,000
مقدار غیر صفر قرار است به اینجا برود،
103
00:03:50,000 –> 00:03:52,480
من این l را برای نشانگر سمت چپ صدا می زنم
104
00:03:52,480 –> 00:03:54,959
و اساساً هر بار که یک
105
00:03:54,959 –> 00:03:56,879
مقدار غیر صفر می بینیم، آن مقدار غیر صفر را می گیریم
106
00:03:56,879 –> 00:03:59,280
و می دانید که اجازه دهید
107
00:03:59,280 –> 00:04:01,360
اجرا کنیم از طریق مثال فقط برای
108
00:04:01,360 –> 00:04:04,080
روشن شدن موضوع بنابراین اولین مقدار صفر است وقتی
109
00:04:04,080 –> 00:04:06,080
یک صفر می بینیم کاری با آن انجام نمی دهیم
110
00:04:06,080 –> 00:04:07,760
زیرا کاری که می خواهیم انجام دهیم این است که
111
00:04:07,760 –> 00:04:10,000
همه غیر صفرها را برداریم و آنها را به
112
00:04:10,000 –> 00:04:11,920
ابتدا منتقل کنیم. صفر را ببینید، ما هیچ کاری انجام نمی دهیم،
113
00:04:11,920 –> 00:04:13,200
اما سپس به مقدار بعدی می رسیم،
114
00:04:13,200 –> 00:04:15,280
این یک عدد غیر صفر است که باید
115
00:04:15,280 –> 00:04:17,358
انجام دهیم و به هر حال، همانطور که در
116
00:04:17,358 –> 00:04:18,880
این آرایه تکرار می کنیم، آن را با اشاره گر سمت راست خود انجام می دهیم،
117
00:04:18,880 –> 00:04:20,560
بنابراین من. من آن را نشان نمی دهم
118
00:04:20,560 –> 00:04:22,320
اما فقط فرض کنید که نشانگر سمت راست ما
119
00:04:22,320 –> 00:04:24,160
در اینجا تمام شده است، اکنون در
120
00:04:24,160 –> 00:04:25,919
ابتدا در همان نقطه نشانگر چپ شروع شده است،
121
00:04:25,919 –> 00:04:28,080
اما اکنون در شاخص بعدی است،
122
00:04:28,080 –> 00:04:30,639
بنابراین ما یکی را می بینیم که به ما می گوید که
123
00:04:30,639 –> 00:04:33,520
ما می خواهیم این مقدار را با
124
00:04:33,520 –> 00:04:37,280
مقدار موجود در نمایه سمت چپ عوض کنید و با
125
00:04:37,280 –> 00:04:39,040
انجام این کار، اساساً یک صفر
126
00