Leetcode 35 vector<int>::iterator 的注意事项

思路:先用STL下界函数查找,找到返回,找不到插入,插入后再对后面排序

官方标注 :时间复杂度为log n 的,它是再查找中优化的利用的二分查找,但是STL的lower_bound 的查找用也是二分//滑动狗头

(1)对于vector每次的插入、删除均会使迭代器失效

(2) 对于迭代的重载可以用下标 i 和 begin() 完成 ,例如 想取nums[i]的迭代器,iterator=nums.begin()+i;

int searchInsert(vector<int>& nums, int target) {
	//lower_bound 
	vector<int>::iterator begin = lower_bound(nums.begin(), nums.end(), target);
	if (begin==nums.end()||*begin != target) {//不存在
		int i= (int)(begin - nums.begin());//记录一下插入下标
		nums.push_back(target);//插入迭代器begin失效
		begin = nums.begin() + i;//此处重新取得nums[i]的迭代器
		sort(begin,nums.end());
		return (int)(begin - nums.begin());
	}
	else {//存在
		return (int)(begin - nums.begin());
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值