从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()
相关推荐
IMPYLH2 小时前
Lua 的 xpcall 函数
开发语言·笔记·后端·游戏引擎·lua
SoleMotive.2 小时前
bio、nio、aio的区别以及使用场景
python·算法·nio
草莓熊Lotso2 小时前
Python 基础语法完全指南:变量、类型、运算符与输入输出(零基础入门)
运维·开发语言·人工智能·经验分享·笔记·python·其他
Hooray112 小时前
后端_Flask学习笔记
笔记·后端·python·学习·flask
西南胶带の池上桜2 小时前
支持pytorch的模型学习环境创建流程(长期更新)
人工智能·pytorch·学习
一招定胜负2 小时前
机器学习算法二:逻辑回归
算法·机器学习·逻辑回归
星诺算法备案2 小时前
算法备案材料:明晰材料逻辑,构建安全合规的算法体系
人工智能·算法·推荐算法·备案
another heaven2 小时前
【软考 cache映射】主存容量
算法
笨鸟先飞的橘猫2 小时前
RPC原理学习
网络协议·学习·rpc