怎么网站建设网站浮动咨询代码
怎么网站建设,网站浮动咨询代码,保亭住房和城乡建设局网站,旅游网站制作内容题目1
给定一个 n 个元素有序的#xff08;升序#xff09;整型数组 nums 和一个目标值 target #xff0c;写一个函数搜索 nums 中的 target#xff0c;如果目标值存在返回下标#xff0c;否则返回 -1。 示例 1:
输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释…题目1
给定一个 n 个元素有序的升序整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target如果目标值存在返回下标否则返回 -1。 示例 1:
输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2:
输入: nums [-1,0,3,5,9,12], target 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1
你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间
来源力扣LeetCode 链接https://leetcode.cn/problems/binary-search 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 解法一
读完题目的第一想法就是遍历一遍数组如果找到了就返回相应的下标如果没找到就返回-1
于是
class Solution {
public:int search(vectorint nums, int target){for(int i0; inums.size();i){if(nums[i]target)return i;}return -1;}
}; 我想这也应该是大部分人的想法了吧
但是当我翻看了评论区后发现了另一种解法——二分查找
解法二
题目中假设数组是有序的、并且是无重复的。
class Solution {
public:int search(vectorint nums, int target)
{int left0;int rightnums.size()-1;while(leftright){int midleft(right-left)/2;if(nums[mid]target){rightmid-1;}else if(nums[mid]target){leftmid1;}else{return mid;}}return -1;
}
}; 题目2
给定一个排序数组和一个目标值在数组中找到目标值并返回其索引。如果目标值不存在于数组中返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
1 nums.length 104-104 nums[i] 104nums 为 无重复元素 的 升序 排列数组-104 target 104
来源力扣LeetCode 链接https://leetcode.cn/problems/search-insert-position 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
这一题其实就是在上一题的基础上进行了一点点改进当目标值不存在于数组中返回的是它被按顺序插入的位置而不再是-1
二分法
class Solution {
public:int searchInsert(vectorint nums, int target) {int left0;int rightnums.size()-1;while(leftright){int midleft(right-left)/2;if(nums[mid]target){rightmid-1;}else if(nums[mid]target){leftmid1;}else{return mid;}}return right1;
}}; 暴力循环法
class Solution {
public:int searchInsert(vectorint nums, int target) {int lennums.size();for(int i0;ilen;i){if(nums[i]target){return i;}}return len;
}};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86387.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!