给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。
int getRightBorder(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
int rightBorder = -2; // 记录一下rightBorder没有被赋值的情况
while (left <= right) {
int middle = left + ((right - left) / 2);
if (nums[middle] > target) {
right = middle - 1;
}
else { // 寻找右边界,nums[middle] == target的时候更新left
left = middle + 1;
rightBorder = left;
}
}
return rightBorder;
}
int getLeftBorder(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
int leftBorder = -2; // 记录一下leftBorder没有被赋值的情况
while (left <= right) {
int middle = left + ((right - left) / 2);
if (nums[middle] >= target) { // 寻找左边界,nums[middle] == target的时候更新right
right = middle - 1;
leftBorder = right;
}
else {
left = middle + 1;
}
}
return leftBorder;
}
int search(vector<int>& nums, int target)
{
int leftBorder = getLeftBorder(nums, target);
int rightBorder = getRightBorder(nums, target);
if (leftBorder == -2 || rightBorder == -2) return { -1, -1 };
if (rightBorder - leftBorder > 1) return { leftBorder + 1, rightBorder - 1 };
return { -1, -1 };
}
int main()
{
cout << "输入任意长度数组" << endl;
vector<int>nums; //输入任意长度数组
int num = 0;
do {
cin >> num;
nums.push_back(num);
} while (getchar() != '\n');
cout << "输入你要查找的值" << endl;
int target;
cin >> target;
system("pause");
return 0;
}
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
int search(vector<int>& nums, int target)
{
int right = nums.size() - 1;
int left = 0;
while (left <= right)
{
int middle = (right + left) / 2;
if (nums[middle]> target)
{
right = middle - 1;
}
else if (nums[middle] < target)
{
left = middle + 1;
}
else
{
return middle;
}
}
return right + 1;
}
int main()
{
cout << "输入任意长度数组" << endl;
vector<int>nums; //输入任意长度数组
int num = 0;
do {
cin >> num;
nums.push_back(num);
} while (getchar() != '\n');
cout << "输入你要查找的值" << endl;
int target;
cin >> target;
int n = search(nums, target);
cout << n << endl;
system("pause");
return 0;
}
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
int search(vector<int>& nums, int target)
{
int right = nums.size() - 1;
int left = 0;
while (left <= right)
{
int middle = (right + left) / 2;
if (nums[middle]> target)
{
right = middle - 1;
}
else if (nums[middle] < target)
{
left = middle + 1;
}
else
{
return middle;
}
}
return -1;
}
int main()
{
cout << "输入任意长度数组" << endl;
vector<int>nums; //输入任意长度数组
int num = 0;
do {
cin >> num;
nums.push_back(num);
} while (getchar() != '\n');
cout << "输入你要查找的值" << endl;
int target;
cin >> target;
int n = search(nums, target);
if (n != -1)
{
cout << "存在,下标为:" << n << endl;
}
else
{
cout << "不存在" << endl;
}
system("pause");
return 0;
}