二分应用的小坑———折半查找

news2024/9/22 11:27:47

啊!啊!啊!啊!啊!!!

TLE越界了

太久没有写代码了

虽热很久没有写代码和博客了,但是功底还是在的
今天打算写一点数据结构的排序部分一点一点落实下来,但是
写着写着卡壳了,以下是没有debug的代码

#include <iostream>
#include<bits/stdc++.h>

using namespace std;
vector<int> a;

int check(int l, int r, int x) {
    while (l < r) {
        int mid = (l + r + 1) >> 1;
        if (a[mid] > x) {
            r = mid - 1;
        } else {
            l = mid;
        }
    }
    return r;
}

void mid_insert_sort() {
    for (int i = 1; i < a.size(); i++) {
        int x = check(0, i, a[i]);
        cout << x << ' ' << i << endl;
        for (int j = i; j > x; j--) {
            swap(a[j], a[j - 1]);
        }
        for (int j = 0; j < a.size(); j++) {
            cout << a[j] << ' ';
        }
        cout << endl;
    }
}

int main() {
    int n;
    cin >> n;
    while (n--) {
        int x;
        cin >> x;
        a.push_back(x);
    }
    mid_insert_sort();
    for (int i: a)cout << i << ' ';
}



反正二分和折半插入的思想没有错
然后开始慢慢检查二分check函数的错误
1.check函数用的bool函数写的
然后返回值都是01,,,,,
以后尽量不用bool类型了,妈的
找完了之后
debug好久硬是没有错误

然后挑了一个例子debug发现每一次

10
49 59 88 37 98 97 68 54 31 3


1 1
49 59 88 37 98 97 68 54 31 3 
2 2
49 59 88 37 98 97 68 54 31 3 
0 3
37 49 59 88 98 97 68 54 31 3 
4 4
37 49 59 88 98 97 68 54 31 3 
3 5
37 49 59 97 88 98 68 54 31 3 
2 6
37 49 68 59 97 88 98 54 31 3 
1 7
37 54 49 68 59 97 88 98 31 3 
0 8
31 37 54 49 68 59 97 88 98 3 
0 9
3 31 37 54 49 68 59 97 88 98 
3 31 37 54 49 68 59 97 88 98 

发现了一个问题

当x大于当前队伍的所有值时,还是会交换x
然后我就特判了一下,发现还是错误,于是我就单独的把check函数拉出来检查一下,发现一个大问题,二分的范围是有限的
就比如这题: 1-5,我的check函数是找到小于等于x的最大值
我发现如果所有值都小于x那么函数return就会返回1
但是这是错误的
然会我就发现,,,,,二分是在当前的范围内进行查找,,,,
但是插入在范围中会比原来的范围多两个边界值
所以,,,,,加上a[0]就可以了,,,,,

#include <iostream>
#include<bits/stdc++.h>

using namespace std;
const int N = 1e5 + 100;
int a[N];
int n;


int check(int l, int r, int x) {
    while (l < r) {
        int mid = (l + r + 1) >> 1;
        if (a[mid] > x) {
            r = mid - 1;
        } else {
            l = mid;
        }
    }
    return r;
}

void mid_insert_sort() {
    for (int i = 1; i <= n; i++) {
        int x = check(0, i, a[i]);
        int idx = i;
        for (int j = i; j - 1 > x; --j) {
            swap(a[j], a[j - 1]);
        }

    }

}

int main() {
    a[0] = INT32_MAX;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    mid_insert_sort();
    for (int i = 1; i <= n; i++)cout << a[i] << ' ';
}

~~大意了,,,,这么个简单的代码和思想
,,,,之前一直以为哨兵是没有用的
在这里插入图片描述

主要是之前的习惯比较好,会特意注意边界问题,一般不会越界,
但是这个插入的会在边界值多出,,,,所以没有想到~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch2.0 环境搭建详细步骤(Nvidia显卡)

Step 1 、查看显卡驱动版本 Step2、下载CUDA 11.7 或者11.8&#xff08;我自己用的这个&#xff09;也行,稍后我会贴出来版本匹配对应表 https://developer.nvidia.com/cuda-toolkit-archive Step3、下载CUDNN cuDNN 9.0.0 Downloads | NVIDIA Developer Step4、安装anconda&…

开源模型应用落地-工具使用篇-Spring AI(七)

一、前言 在AI大模型百花齐放的时代&#xff0c;很多人都对新兴技术充满了热情&#xff0c;都想尝试一下。但是&#xff0c;实际上要入门AI技术的门槛非常高。除了需要高端设备&#xff0c;还需要面临复杂的部署和安装过程&#xff0c;这让很多人望而却步。不过&#xff0c;随着…

HCIA-HarmonyOS设备开发认证V2.0-习题2

目录 习题一习题二坚持就有收获 习题一 # 判断题## 1.PWM占空比指的是低电平时间占周期时间的百分比。(错误)正确(True)错误(False)解题&#xff1a; - PWM占空比指的是高电平时间占周期时间的百分比## 2.UART是通用异步收发传输器&#xff0c;是通用串行数据总线&#xff0c;…

vue router 解决路由带参数跳转时出现404问题

我的页面是从一个vue页面router跳转到另一个vue页面&#xff0c;并且利用windows.open() 浏览器重新创建一个页签。但是不知道为什么有时候可以有时候又不行&#xff0c;经过反复测试与分析&#xff0c;最终发现是因为有一个参数的值里包含了小数点., 小数点是浏览器合法字符&a…

COMSOL热应力仿真

热应力 热膨胀子节点 热膨胀输入类型 假如直接知道热膨胀大小&#xff0c;可以直接对热应变进行赋值。 约束与载荷 对于自由膨胀&#xff0c;可以添加抑制刚体运动。 案例分析 在参数部分&#xff0c;设定体积参考温度Tref&#xff0c;假定在25[degC]模型无热应变。 APP开发器-…

git分布式管理-头歌实验搭建Git服务器

一、Git服务器搭建 任务描述 虽然有提供托管代码服务的公共平台&#xff0c;但是对一部分开发团队来说&#xff0c;为了不泄露项目源代码、节省费用及为项目提供更好的安全保护&#xff0c;往往需要搭建私有Git服务器用做远程仓库。Git服务器为团队的开发者们&#xff0c;提供了…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:ImageSpan)

Text组件的子组件&#xff0c;用于显示行内图片。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 ImageSpan(value: ResourceStr | PixelMap) 参数&#xff1a; 参数名参数类…

ShardingSphere-SQL 解析 Issue 处理流程

ShardingSphere-SQL 解析 Issue 处理流程 这是之前给社区写的 SQL 解析 Issue 的处理流程&#xff0c;可以帮助社区用户快速参与到 ShardingSphere-SQL 解析任务当中。 ShardingSphere SQL 解析 issue 列表 Issue 背景说明 当前 Issue 使用自定义的爬虫脚本从对应的数据库官…

vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载

文章目录 导文文章重点内容效果展示&#xff1a;代码展示这些方法适用于哪些场景 总结 导文 vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载 文章重点 内容效果展示&#xff1a; 当div拉到底部的时候&#xff1a; 编辑器返回&#xff1a; 代码展示 在…

分享axios+MQTT简单封装示例

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的"轻量级"通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在19…

鸿蒙实战开发Camera组件:【相机】

相机组件支持相机业务的开发&#xff0c;开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发&#xff0c;最常见的操作如&#xff1a;预览、拍照和录像等。 基本概念 拍照 此功能用于拍摄采集照片。 预览 此功能用于在开启相机后&#xff0c;在缓冲区内重复采集…

IP地址定位技术的主要功能及应用

在互联网时代&#xff0c;IP地址定位技术成为了一项重要的技术&#xff0c;它通过分析用户的IP地址&#xff0c;确定用户的地理位置信息。IP地址定位技术不仅在网络安全、网络管理等领域有着重要的应用&#xff0c;也在商业、广告营销等领域发挥着重要作用。IP数据云将探讨IP地…

【网络层】IP多播技术的相关基本概念(湖科大慕课自学笔记)

IP多播 1&#xff1a;IP多播技术的相关基本概念 我们简单举例&#xff0c;如下图所示&#xff1a; 一共有60个主机要接受来自视频服务器的同一个节目&#xff0c;如果采用单播方式&#xff0c;则视频服务器要发送60份&#xff0c;这些视频节目通过路由器的转发&#xff0c;最…

⎣优化技术⎤CoT-Decoding

微信公众号|人工智能技术派 作 者|hws 一种解码策略优化技术&#xff1a;目标是不需要任何显示的CoT prompting&#xff0c;能够有效提升大型语言模型在各种推理任务中的表现&#xff0c;并通过自发地揭示CoT推理路径&#xff0c;改善模型的推理能力和准确性。 背景介绍 大模…

【Linux基础(四)】管道

学习分享 1、什么是管道2、管道的分类3、管道的特点4、pipe函数&#xff08;匿名管道&#xff09;5、命名管道&#xff1a;FIFO文件5.1、创建一个命名管道5.2、访问一个FIFO文件 6、命名管道示例6.1、写操作示例6.2、读操作示例 7、access函数和mkfifo函数8、删除FIFO文件 1、什…

基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206

摘 要 本宠物健康咨询系统分为管理员还有用户两个权限&#xff0c;管理员可以管理用户的基本信息内容&#xff0c;可以管理公告信息以及宠物健康知识信息&#xff0c;能够与用户进行相互交流等操作&#xff0c;用户可以查看宠物健康知识信息&#xff0c;可以查看公告以及查看…

一个将图片转3D的开源项目TripoSR

TripoSR AI是StabilityAI联合发布的图生3D模型&#xff0c;TripoSR是一个快速的3D物体重建模型。TripoSR能够在不到一秒钟的时间内从单张图片生成高质量的3D模型。TripoSR模型的特点是能够快速处理输入&#xff0c;在 NVIDIA A100 GPU 上不到 0.5 秒的时间内生成高质量的 3D 模…

【STM32+OPENMV】二维云台颜色识别及追踪

一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容&#xff0c;详情见【STM32HAL】与OpenMV通信 有关七针OLED屏显示内容&#xff0c;详情见【STM32HAL】七针OLED(SSD1306)配置(SPI版) 二、所用工具 1、芯片&#xff1a;STM32F407ZGT6 2、CUBEMX配置软件 3、KEIL5 4…

Python和Google Colab进行卫星图像二维小波变化和机器学习

2D 小波分解是图像处理中的一种流行技术,使用不同的滤波器将图像分解为不同的频率分量(“近似”和“细节”系数)。该技术对于各种图像处理任务特别有用,例如压缩、去噪、特征提取和边缘检测。 在本文中,我们将演示如何在 Google Colab 中使用 Python 下载高分辨率样本卫星…

XSS-Labs靶场1---11关

一、XSS环境搭建&#xff1a; [ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客 &#xff08;该博主总结的较为详细&#xff0c;若侵权必删&#xff09; 常用的xss攻击语句&#xff1a; 输入检测确定标签没有过滤后&#xff0c;为了显示存在漏洞&#…