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