第一个大于

题目描述

输入$n(n≤10^6)$个不超过$10^9$的单调不减的(就是后面的数字不小于前面的数字)非负整数$a_1, a_2, ..., a_n$,然后进行$m(m≤10^5)$次询问。对于每次询问,给出一个整数$q(q≤10^9)$,要求输出序列中第一个大于该数的位置。如果没有这样的位置,请输出-1

输入描述

第一行2个整数,表示数字个数n和询问次数m。

第二行n个整数,表示这些待查询的数字。

第三行m个整数,表示询问这些数字的编号,从1开始编号。

输出描述

m个整数表示答案。

输入样例
11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 20
输出样例
2 5 -1
//解答代码
#include <cstdio>  
#include <iostream> 
using namespace std;
int bsearch(int a[], int n, int target){
    int low = 1; 
    int high = n;
    
    while (low < high) { 
        int mid = low + (high -low)/ 2 ;
        if (a[mid] > target) 
            high = mid;
        else 
            low = mid + 1; 
    }
    return a[high]>target?high:-1; 
}

int nums[1000010];
int main(){
    int n, m, target;
    scanf("%d %d", &n, &m);  

    for (int i = 1; i <= n; i++)
        scanf("%d", &nums[i]);  
        
    for (int i = 1; i <= m; i++){
        scanf("%d", &target); 
        printf("%d ", bsearch(nums, n, target));
    }
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是Python代码实现: ```python def first_larger_than_k(arr, k): """ 返回第一个大于k的值的位置 """ for i in range(len(arr)): if arr[i] > k: return i return -1 # 如果没有大于k的值,则返回-1 ``` 该函数接受两个参数:一个数组和一个整数k。它使用for循环遍历数组中的每个元素,如果找到第一个大于k的元素,则返回其索引。如果没有找到大于k的元素,则返回-1。 ### 回答2: 要返回第一个大于k的值的位置,我们可以使用循环遍历数组的方法来实现。 首先,我们需要一个变量来记录目标位置。设置初始值为-1,这样如果没有找到满足条件的值,最后可以返回-1。 其次,我们可以遍历数组的每个元素,检查是否大于k。如果找到第一个满足条件的元素,就将其位置记录到目标位置变量中,并且跳出循环。 最后,我们返回目标位置的值即可。 以下是一个示例代码实现: ```python def find_first_greater_than_k(arr, k): target_idx = -1 # 定义目标位置的变量 for i in range(len(arr)): if arr[i] > k: target_idx = i # 找到第一个大于k的值的位置 break return target_idx # 测试代码 arr = [1, 3, 5, 7, 9] k = 4 result = find_first_greater_than_k(arr, k) print("第一个大于{}的值的位置是:{}".format(k, result)) ``` 以上代码中,我们将数组 `[1, 3, 5, 7, 9]` 作为输入数组,要找到大于4的值的位置。在该示例中,元素5是第一个大于4的值,因此返回的目标位置是2。 ### 回答3: 要返回第一个大于k的值的位置,首先我们需要遍历整个数组来找到这个值。假设给定的数组为a,长度为n,我们可以通过以下步骤来找到第一个大于k的值的位置: 1. 初始化一个变量pos为-1,表示当前还没有找到大于k的值。 2. 从数组的第一个元素开始,依次遍历数组的每个元素。 3. 对于每个元素a[i],如果a[i]大于k,则将pos的值设为i,并且跳出循环。 4. 如果循环结束后pos的值仍然为-1,表示数组中没有大于k的值。 5. 否则,pos的值即为第一个大于k的值的位置。 下面是一个用Java语言实现的示例代码: ```java public int findFirstGreaterThanK(int[] a, int k) { int pos = -1; for (int i = 0; i < a.length; i++) { if (a[i] > k) { pos = i; break; } } return pos; } ``` 通过这个函数,我们可以得到数组中第一个大于k的值的位置。如果返回值为-1,则表示数组中没有大于k的值。注意,这个函数只返回第一个满足条件的位置,如果数组中有多个大于k的值,只返回第一个。如果需要返回所有大于k的值的位置,需要做相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值