2275. 按位与结果大于零的最长组合

27 篇文章 0 订阅
21 篇文章 0 订阅

基本版(超时) :

class Solution {
public:
    int largestCombination(vector<int>& candidates) {
        int ans = 1;
      
        // 先排序
        sort(begin(candidates), end(candidates));
      
        // 将所有元素放入递归队列
        for(int i = 0; i < candidates.size(); i++){
           int cal = candidates[i];
           recursive(i + 1, 1, cal, &ans, candidates);
        }     
      
        return ans;
    }
     
    void recursive(int ind, int len, int num, int *ans, vector<int> &vec){
       // 获取最大值  
       *ans = max(*ans, len); 
      
       // 递归结束条件
       if(ind >= vec.size()){
         return;
       }
      
       // 继续放入递归队列
       for(int i = ind; i < vec.size(); ){
           int cal = (num & vec[i]);
           
           // 如果已经为0直接跳出循环
           if(cal == 0){
             i++;
             continue;
           }
            
           // 默认的递增为1
           int add = 1;
         
           // 如果存在相同的直接跳过,记录累加数
           while(i + add < vec.size() && vec[i + add] == vec[i]){
             add++;
           }
         
           recursive(i + add, len + add, cal, ans, vec);
         
           i += add;
       }
      
       return; 
    } 
};

优化参考版:TODO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值