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