给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,请你用C++写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
时间: 2023-02-24 15:32:32 浏览: 295
以下是在C语言中实现的二分查找函数:
```
int binarySearch(int nums[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
```
这个函数使用二分查找算法,在数组`nums`中查找`target`,如果找到了,返回它的下标;如果没有找到,返回-1。
相关问题
用C++实现给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
好的,这是一个简单的二分查找问题,在 C++ 中可以这样实现:
```c++
int binarySearch(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
这个函数接受一个有序的整型数组 `nums` 和一个目标值 `target`,在 `nums` 中查找 `target`。如果找到了,返回对应的下标;否则返回 -1。
函数首先初始化左右指针 `left` 和 `right` 分别为数组的第一个和最后一个元素的下标。然后进入循环,只要 `left` 没有超过 `right`,就一直查找。
在循环中,首先计算中间元素的下标 `mid`。如果 `nums[mid]` 等于 `target`,说明找到了,直接返回 `mid`。如果 `nums[mid]` 小于 `target`,说明 `target` 在 `mid` 的右侧,将 `left` 更新为 `mid + 1`。如果 `nums[mid]` 大于 `target`,说明 `target` 在 `mid` 的左侧,将 `right` 更新为 `mid - 1`。
如果循环结束仍然没有找到 `target`,说明 `target` 不在数组中,返回 -1。
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。给出C++代码
这是一个常见的编程问题,通常被称为“两数之和”(Two Sum)。在C++中,可以使用哈希表(unordered_map)来解决这个问题,因为它允许我们快速查找目标值减去当前元素的差值是否存在。以下是简单的C++解决方案:
```cpp
#include <unordered_map>
std::pair<int, int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); ++i) {
int complement = target - nums[i];
if (map.find(complement) != map.end()) {
return {map[complement], i};
}
map[nums[i]] = i; // 将当前元素及其索引存入哈希表
}
throw runtime_error("No solution found!"); // 如果找不到解,抛出异常
}
// 示例
vector<int> nums = {2, 7, 11, 15};
int target = 9;
auto result = twoSum(nums, target);
cout << "Indices of the two numbers are: " << result.first << ", " << result.second << endl;
```
在这个代码里,遍历数组的同时检查目标值与当前元素的差是否已在哈希表中。如果存在,就找到了一对和为目标值的数,直接返回它们的索引;如果没有找到,将当前元素及其索引添加到哈希表中继续搜索。
阅读全文