rust 组合算法

rust 组合算法

简述

组合:求一个m长的数列,n(n\<= m)个元素的所有组合。

代码

计算下一个组合序号

fn generate_next_index(length :usize,index:&mut Vec<usize>){
    let index_length = index.len();
    let mut p:usize = index_length-1;
    loop {
        if p < 1{
                break;
            }
        if index[p]  == length+p-index_length{
            p -= 1;
        }else{
            break;
        }
    }
    let mut num:usize;
    num = index[p];
    while p< index_length{
        num +=1;
        index[p] = num;
        p+=1;
    }
}

emmm

fn print_all_c(ls :&Vec<i64>,n usize){
    let length = ls.len();
    if n > length{
        return
    }
    let mut index:Vec<usize> = (0..n as usize).collect();
    let last_index = ls.len() - k as usize;
    let mut start_index:usize = 0;
    while start_index <= last_index{
        index.iter().for_each(|&x| print!("{} ",ls[x]));
        print!("\n")
        generate_next_index(length,&mut index);
        start_index = index[0];
    }
}

求所有组合中的最大和

fn get_max_sum(ls:&Vec<i64>,n usize) -> i64{
    let mut res:i64 = -1;
    let length = ls.len();
    if n > length{
        return res;
    }
    let mut index:Vec<usize> = (0..n as usize).collect();
    let last_index = ls.len() - k as usize;
    let mut start_index:usize = 0;
    let mut sum:i64;
    while start_index <= last_index{
        sum = index.iter().fold(0,|ass,&x| ass+ls[x]);
        if sum > res{
            res = sum;
        }
        generate_next_index(length,&mut index);
        start_index = index[0];
    }
}

ps: rust Iiterator 提供fold方法,类似与python中的reduce方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值