从0开始学算法——第十四天(数组与搜索练习)

写在开头的话

学习了今天的基础知识,让我们来做道题来练练手吧。(题目是别的地方扒来的,参考答案是我自己写的,肯定不是最优解,有更好的方法欢迎评论区交流)

题目一------整数二分

第一题参考答案(Python版)

python 复制代码
import sys
import bisect

def main():
    data = sys.stdin.read().split()
    it = iter(data)
    n = int(next(it))
    q = int(next(it))
    A = [int(next(it)) for _ in range(n)]

    out_lines = []
    for _ in range(q):
        t = int(next(it))
        l = int(next(it))
        r = int(next(it))
        x = int(next(it))

        if t == 1:      # 等于 x 的最左边下标
            low = bisect.bisect_left(A, x) + 1   # 全局第一个 >= x 的下标(1‑based)
            pos = max(low, l)
            if pos <= r and A[pos-1] == x:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

        elif t == 2:    # 等于 x 的最右边下标
            high = bisect.bisect_right(A, x) + 1  # 全局第一个 > x 的下标(1‑based)
            pos = min(high-1, r)
            if pos >= l and A[pos-1] == x:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

        elif t == 3:    # 第一个 >= x 的下标
            low = bisect.bisect_left(A, x) + 1
            pos = max(low, l)
            if pos <= r:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

        else:           # t == 4,第一个 > x 的下标
            high = bisect.bisect_right(A, x) + 1
            pos = max(high, l)
            if pos <= r:
                out_lines.append(str(pos))
            else:
                out_lines.append("-1")

    sys.stdout.write("\n".join(out_lines))

if __name__ == "__main__":
    main()
相关推荐
存储服务专家StorageExpert几秒前
NetApp NVME SSD 盘的学习笔记
运维·服务器·笔记·学习·存储维护·emc存储·netapp
自信150413057597 分钟前
选择排序算法
c语言·数据结构·算法·排序算法
2401_873544928 分钟前
基于C++的游戏引擎开发
开发语言·c++·算法
add45a9 分钟前
C++中的组合模式
开发语言·c++·算法
無限進步D10 分钟前
简单贪心算法 cpp
c++·算法·贪心算法·蓝桥杯·入门·竞赛
无聊大侠hello world12 分钟前
黑马大模型 RAG 与 Agent 实战学习笔记
笔记·学习
2501_9454235413 分钟前
模板编程中的SFINAE技巧
开发语言·c++·算法
AMoon丶13 分钟前
Golang--垃圾回收
java·linux·开发语言·jvm·后端·算法·golang
2501_9181269113 分钟前
学习所有python写服务器的语句
服务器·人工智能·python·学习·个人开发
承渊政道14 分钟前
【优选算法】(实战感悟二分查找算法的思想原理)
c++·笔记·学习·算法·leetcode·visual studio code