用python语言编写代码输入 n 个不超过 10^9 的单调非递减(就是后面的数字不小于前面的数字)的非负整数序列a1,a2,…,an,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出−1。(1≤n≤10^6,1≤m≤10^5)。用python语言实现
时间: 2023-03-23 17:00:41 浏览: 287
可以用二分查找的方法实现,时间复杂度为O(mlogn)。
具体实现代码如下:
```python
n, m = map(int, input().split())
a = list(map(int, input().split()))
def find_index(q):
left, right = 0, n - 1
while left <= right:
mid = (left + right) // 2
if a[mid] < q:
left = mid + 1
else:
right = mid - 1
if left < n and a[left] == q:
return left + 1
else:
return -1
for i in range(m):
q = int(input())
print(find_index(q))
```
首先输入n和m,以及序列a。然后定义一个函数`find_index`来查找数字q在序列a中第一次出现的编号。函数中使用二分查找的方法来搜索q在a中的位置,找到后返回该位置的编号。如果没找到,则返回-1。
最后对于每次询问,输入数字q,调用`find_index`函数并输出结果即可。
相关问题
请用python编写输入一些小于10的非负整数,求这些数组成的最大整数,要求各位数字互不相同。 输入格式: 用空格分隔输入一些小于10的非负整数,要求每个整数x符合条件:0⩽x<10 输出格式: 输出一个整数,由输入的数组成的最大整数,且每位数字各不相同。 输入样例: 在这里给出一组输入。例如: 3 1 1 1 1 3 9 4 4 输出样例: 在这里给出相应的输出。例如: 9431
以下是 Python 代码实现:
```python
nums = input().split() # 读入一行数字并按空格分隔成列表
nums = sorted(list(set(nums)), reverse=True) # 去重排序
res = int(''.join(nums)) # 拼接数字并转换为整数
print(res)
```
解释:
1. 读入一行数字,并按空格分隔成列表。
2. 去重并排序,得到一个列表,其中元素都是字符串类型,且按照从大到小的顺序排列。
3. 通过将列表中的元素拼接成字符串,再将字符串转换为整数,得到最终的结果。
4. 输出结果。
python输入一个正整数 n,随机产生 10 个不超过 3 位的非负整数,将这些数字首尾相连以字符串形式输出。
好的,可以使用以下代码实现:
```python
import random
n = int(input("请输入正整数n:"))
nums = []
for i in range(10):
nums.append(str(random.randint(0, 999)))
result = ''.join(nums)[:n]
print(result)
```
首先,我们通过 `input` 函数获取用户输入的正整数 `n`,然后使用一个循环生成 10 个不超过 3 位的非负整数,并将它们转换成字符串格式后添加到一个列表中。接着,我们使用 `join` 函数将列表中的数字首尾相连,并使用字符串切片操作截取前 `n` 位作为最终结果。最后,我们将结果输出到控制台。
阅读全文