leetcode简单题10 N.35 搜索插入位置 rust描述

// [1,3,5,6] 5 2
// [1,3,5,6] 2 1
// [1,3,5,6] 7 4
// [1,3,5,6] 0 0 额外加的
// 二分查找
pub fn search_insert(nums: Vec<i32>, target: i32) -> i32 {
    let mut left = 0; // 左边界
    let mut right = nums.len() as i32 - 1;// 右边界
    // 以mid值来构建循环逻辑的,感觉以target值来构建循环逻辑更好 虽然我没试
    // mid所在值 小于 目标值动left mid推后 大于动right mid推前
    while left <= right { // right到了left左边
        let mid = left + (right - left) / 2;// 计算中间值 相加除2更好 语义更明确 (left + right) / 2  4长度中间值 2 5长度中间值 3 向零取整中间值模型 0 0 1 0 | 0 0 1 0 0
        if nums[mid as usize] == target { // 判断是否找到
            return mid;// 返回中间值
        } else if nums[mid as usize] < target {// mid所在值 小于 目标值动left mid推后 大于动right mid推前
            left = mid + 1;//如果不在乎性能的话 left += 1 也可以 这个分支只需要left是一直增加就行,照样能达成目的 用mid是更快点 个人建议用mid还是拆成left和right比较好,比较清晰
        } else {
            right = mid - 1;//如果不在乎性能的话 right -=1 也可以 这个分支只需要right是一直减小就行,照样能达成目的 用mid是更快点 个人建议用mid还是拆成left和right比较好,比较清晰
        }
    }
    left
}
fn main() {
    assert_eq!(search_insert(vec![1, 3, 5, 6], 5), 2);
    assert_eq!(search_insert(vec![1, 3, 5, 6], 2), 1);
    assert_eq!(search_insert(vec![1, 3, 5, 6], 7), 4);
    assert_eq!(search_insert(vec![1, 3, 5, 6], 0), 0)
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值