江苏省网站备案系统公司网站 优帮云
江苏省网站备案系统,公司网站 优帮云,wordpress 用户私信功能,宣传网站开发题目#xff1a; 给你一个按照非递减顺序排列的整数数组 nums#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target#xff0c;返回 [-1, -1]。
方法1、枚举 思路#xff1a;通过正向枚举和反向枚举找到对应…题目 给你一个按照非递减顺序排列的整数数组 nums和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target返回 [-1, -1]。
方法1、枚举 思路通过正向枚举和反向枚举找到对应下标的位置
#includeiostream
#includevector
using namespace std;class Solution
{vectorint searchRange(vectorint nums,int target){// 定义了2个整型元素的向量,且给出每个元素的初值为-1vectorint ans(2,-1);int n nums.size();for(int i 0;in; i){if(nums[i] target){ans[0] i;break;}}for(int j n-1;j0;j--){if(nums[j] target){ans[1] j;break; }}return ans; }
};
方法2、二分查找 思路 找等于target的一个位置可以等价于求 target的第一个位置 找等于target的最后一个位置可以等价于求 target1的第一个位置 - 1 问题的难点就变成了如何快速找到大于等于target的第一个元素位置
class Solution
{
public:// 闭区间[left,right]int lowBound(vectorint nums,int target){int left 0, right nums.size()-1;while(leftright){int mid left (right - left)/2;if(nums[mid] target){left mid 1;}else{right mid - 1;}}return left;}vectorintsearchRange(vectorint nums, int target){// 左区间值int start lowBound(nums,target);// 如果nums中没有targetif(start nums.size() || nums[start] ! target){return {-1,-1};}// 右区间值int end lowBound(nums,target 1)-1;return {start,end};}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90415.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!