实践检验真知
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);
}
}