rust 力扣 - 两数之和 - 数组实现 -8

实践检验真知



fn main() {
    sum_two_num();
}

fn sum_two_num(){
    let nums = [2,7,11,7,2,7,2];
    let target = 9;
    let mut n0= 0;//数组读取位置
    let mut n1= 0;//外层便利数
    let mut n2= 0;//内层便利数
    for num1 in nums.iter() {
        if n1 >= n0{
            n0+=1;
            for num2 in nums.iter() {
                if n2 >= n0 && target == (num1 + num2) {//借用和获取差值.找对应的值
                        println!("for_f2   {} {}", n1, n2);n0+=1; n2+=1;
                        break;
                }
                n2+=1;
            }
        }
        n1+=1;n2= 0;
    }
}

优化一

fn sum_two_num(){
    let nums = [2,7,11,7,2,7,2];
    let target = 9;
    let mut n0= 0;//数组读取位置
    for  (n1, &num1) in nums.iter().enumerate() {
        if n1 >= n0{
            n0+=1;
            for  (n2, &num2) in nums.iter().enumerate() {
                if n2 >= n0 && target == (num1 + num2) {//借用和获取差值.找对应的值
                    println!("for_f2   {} {}", n1, n2);
                    n0+=1;
                    break;
                }
            }
        }
    }
}

优化二

fn sum_two_num(){
    let nums = [2,7,11,7,2,7,2];
    let target = 9;
    let mut n0= 0;//数组读取位置
   'outer:  for  (n1, &num1) in nums.iter().enumerate() {
                if n1 >= n0{
                      n0+=1;
                      for  (n2, &num2) in nums.iter().enumerate() {
                           if n2 >= n0 && target == (num1 + num2) {//借用和获取差值.找对应的值
                           println!("for_f2   {} {}", n1, n2);n0+=1;
                           continue 'outer;
                          }
                       }
                 }
            }
}

优化三

use std::collections::HashMap;

fn main() {
    let nums = vec![2, 7, 11, 7, 2, 7, 2];
    let target = 9;
    let mut map = HashMap::new(); //默认长度是0
    for (n, &num) in nums.iter().enumerate() {
        if let Some(x) = map.get(&(target - num)) {
            if *x != n {
                println!("{},{}", *x as i32, n as i32)
            }
        }
        map.insert(num, n);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39308071/article/details/113136058