Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[pull] master from wisdompeak:master #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
pull merged 16 commits into AlgorithmAndLeetCode:master from wisdompeak:master
Jun 20, 2022
Merged
Changes from 1 commit
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
21c5983
Update 642.Design-Search-Autocomplete-System.cpp
wisdompeak Jun 19, 2022
8f5c9fb
Update Readme.md
wisdompeak Jun 19, 2022
57e78dd
Create 2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K_v1.cpp
wisdompeak Jun 19, 2022
64d401c
Create 2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K_v2.cpp
wisdompeak Jun 19, 2022
16bd37e
Update 2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K_v1.cpp
wisdompeak Jun 19, 2022
99fca9d
Create Readme.md
wisdompeak Jun 19, 2022
655136c
Update Readme.md
wisdompeak Jun 19, 2022
36cd4a4
Create 2312.Selling-Pieces-of-Wood.cpp
wisdompeak Jun 19, 2022
99bb6dd
Update Readme.md
wisdompeak Jun 19, 2022
0cb6957
Create Readme.md
wisdompeak Jun 19, 2022
54e342b
Update Readme.md
wisdompeak Jun 19, 2022
94b6826
Create 2222.Number-of-Ways-to-Select-Buildings.cpp
wisdompeak Jun 19, 2022
fbf5e9a
Update Readme.md
wisdompeak Jun 19, 2022
99304f3
Create Readme.md
wisdompeak Jun 19, 2022
7d629b3
Update 2222.Number-of-Ways-to-Select-Buildings.cpp
wisdompeak Jun 19, 2022
f3ef226
Update Readme.md
wisdompeak Jun 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Create Readme.md
  • Loading branch information
wisdompeak authored Jun 19, 2022
commit 99fca9d05ecaa0a7ba0e6cad97c3b5e5c46d884c
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
### 2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K

#### 解法1:
我们将k同样也转化为二进制的字符串,标记为t。我们令s的长度是m,t的长度为n。注意,因为k是个整形,n的长度不会超过32.

接下来考虑题目中说的"最长"是什么意思。通常情况下,长度小于n的二进制数一定小于k,长度大于n的二进制数一定会大于k,"最长"不就是n吗?本题的关键点在于leading zeros。所以,我们希望尽可能地在期望的subsequence前面堆积0,这就意味着我们希望将subsequence放在s里尽量靠后的位置。

所以我们本题的做法就是:在s里从后往前依次寻找一个起点位置i,判断是否存在一个从i开始的subsequence,使其小于等于t,有的话就再加上s[0:i-1]里的所有0的个数,就是期望的总长度。最后,我们在所有的i的选择里面挑一个答案最长的。

那么指定了起点i,如何判断是否存在一个subsequence小于等于t呢?用递归的方法贪心地扫描即可。如果t[j]是0,那么s[i]必须是0,于是移动i直至找到0,与之match,双指针再自增1。如果t[j]是1,那么如果s[i]是0,直接OK;如果s[j]是1,那么与之match,双指针都自增1.

这种方法的时间复杂度是o(32n)

#### 解法2:
在解法1的基础上,事实上我们不需要遍历所有起点位置,只需要考察一个位置i=m-n,也就是只需要考察最后一个长度为n的substring即可。这是为什么呢?

先考虑basic plan:只看最后n-1长度的substring(必然小于t),再加上[0:m-n]之间的所有的0. 这显然是一个合法的解。

再考虑如果以i=m-n为起点、长度为n的substring,如果大于t的话(显然s的第i位必然是1),那么说明什么?说明缺0。我们必须将i往前移,目的是为了能够引入0,这样才可能将之后的subsequence的大小降下来。但是一旦真的能引入一个0进入subsequence,那么代价就是损失了一个leading zero。那么收益呢?收益就是将subsequence的匹配度从n-1提升到n而已,并没有优势。

所以本题非常简单,在考察完basic plan之后,只需要查看取最后长度n的substring是否为另一个plan即可。

AltStyle によって変換されたページ (->オリジナル) /