力扣2311:小于等于K的最长二进制子序列
题目:2311. 小于等于 K 的最长二进制子序列 - 力扣(LeetCode)
贪心
从前往后递增的时候,0和1进行对比,肯定是选0,因为选0即使产生总值的增加效果也只是和1一样,但是0可能会存在前置0,可能不会产生影响。所以我们一定要选更多的0,将所有的0选出来之后,再从地位到高位增加1的个数。
public int longestSubsequence(String s, int k) {int ret=0;int n=s.length();int sm=0;int bits=(int)(Math.log(k)/Math.log(2))+1;//Math.log(k)相当于lnkfor(int i=0;i<n;i++) {char x=s.charAt(n-1-i);if(x=='0') {ret++;} else {if(i<bits&&(sm+(1<<i))<=k) {sm+=1<<i;ret++;}}}return ret;}