位运算,双指针,二分,排序算法

news2025/2/22 18:23:38

文章目录

  • 位运算
    • 二进制中1的个数
    • 题解
    • 代码
    • 我们需要0
    • 题解
    • 代码
  • 排序
    • 模版排序1
    • 题解
    • 代码
    • 模版排序2
    • 题解
    • 代码
    • 模版排序3
    • 题解
    • 代码
  • 双指针
    • 最长连续不重复子序列
    • 题解
    • 代码
  • 二分
    • 查找
    • 题解
    • 代码

位运算

在这里插入图片描述
在这里插入图片描述

1. bitset< 16 >将十进制数转为16位的二进制数

int x = 25;
cout << bitset<16>(x) << endl;

二进制中1的个数

在这里插入图片描述

题解

1. 就是每个数与上1判断低位是否是1,是1就加,否则不加,判断完后,这个数右移1位,再判断,直到这个数变为0为止

代码

// 3  011 & 001  1 count++
//        >> 001 & 001 1 count++
#include<iostream>
#include<vector>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> v(n);
    for (int i = 0; i < n; i++)
        cin >> v[i];
    for (int i = 0; i < n; i++)
    {
        int count = 0;
        int val = v[i];
        while (val)
        {
            if (val & 1)
                count++;
            val /= 2;
        }
        v[i] = count;
    }
    for (int i = 0; i < n; i++)
        cout << v[i] << " ";

    return 0;
}

我们需要0

在这里插入图片描述

题解

1. 利用了x ^ x = 0和0 ^ x = x这两个性质

代码

// 1 ^ 2  ^ 3 ^ x ^ x ^ x  
// 1 ^ 2 ^ 3 ^ x = 0
// 1 ^ 2 ^ 3 ^ x ^ x == 0 ^ x
// 1 ^ 2 ^ 3 == x

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    int t, n;
    cin >> t;
    int k = 0;
    int x = 0;

    while (t--)
    {
        cin >> n;
        vector<int> v(n+1);
        int sum = 0;
        for (int i = 1; i <= n; i++)
            cin >> v[i];
        for (int i = 1; i <= n; i++)
            sum ^= v[i];

       cout << sum << '\n';
    }

    return 0;
}

排序

在这里插入图片描述

1. 使用unique之前要确保数组是有序的,有序的才能确保所有元素都是唯一的
2.unique会把重复的元素移动到数组的末尾,最后返回第一个重复元素的迭代器

模版排序1

在这里插入图片描述

题解

1. 先排序,然后用unique进行返回第一个重复元素的迭代器,最后用erase删除这些重复元素

代码

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> v(n);
    for(int i = 0;i < n;i++)
    cin >> v[i];

    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
    for(auto x : v)
    cout << x << " ";

    return 0;
}

模版排序2

在这里插入图片描述

题解

1. 自己写一个排序的逻辑,自定义类型的排序
2.升序的,逆置完之后就可以变为降序的了

代码

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

const int N = 2e5 + 10;
struct Book
{
    int a;
    int b;
    int c;
    bool operator<(const Book& v) const
    {
        if (a == v.a && b == v.b) return c < v.c;
        if (a == v.a) return b < v.b;
        return a < v.a;
    }

}u[N];

int main()
{
    int n = 0;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> u[i].a >> u[i].b >> u[i].c;

    sort(u, u + n);
    reverse(u, u + n);

    for (int i = 0; i < n; i++)
        cout << u[i].a << " " << u[i].b << " " << u[i].c << '\n';

    return 0;
}

模版排序3

在这里插入图片描述

题解

1. 这题用了桶排序的思想
2.记录出现数字的次数,然后用次数控制循环,输出[ ]里的数就是存进去的数,可以按顺序输出了

代码

// 桶排序

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

const int N = 2e5 + 10;
int v[N];

int main()
{
    int n = 0;
    cin >> n;
    

    for(int i = 1;i <= n;i++)
    {
       int x;
       cin >> x;
       v[x]++;
    }

    for(int i = 0;i <= 2e5;i++)
    {
        // v[i] 是出现的次数
        for(int j = 0;j < v[i];j++)
        {
            // i是出现的数字
            cout << i << " ";
        }
    }
    cout << '\n';

    return 0;
}

双指针

1. 一快一慢(快慢指针)
2.区间内维护某个东西(滑动窗口)

在这里插入图片描述

最长连续不重复子序列

在这里插入图片描述

题解

1. 开始的时候i = 1,j = 0
2.j向右走的条件j+1下标的数不在数组中
3. 如果出现重复的数,更新i,让i向后走
4. 代码中使用桶的思想解决

在这里插入图片描述

代码

#include<iostream>
#include<vector>
#include<algorithm>

const int N = 1e5 + 10;
using namespace std;
int a[N],b[N];

void solve()
{
    int n = 0;
    cin >> n;
    for(int i = 1;i <= n;i++) cin >> a[i];
    
    int ans = 0;
    // 初始化桶数组
    for(int i = 1;i <= n;i++) b[a[i]] = 0;

    for(int i = 1,j = 0;i <= n;i++)
    {
        // j < n并且后一个数不在桶数组中
        while(j < n && !b[a[j+1]]) b[a[++j]]++;
        
        // 更新最大长度
        ans = max(ans,j - i + 1);
        // i之后要++,让i往后走一个,把之前在桶数组中的数删除
        b[a[i]]--;
    }
    cout << ans << '\n';
}

int main()
{
    int T = 0;
    cin >> T;
    while(T--)
    {
        solve();
    }

    return 0;
}

二分

1. 二分的步骤
在这里插入图片描述
在这里插入图片描述

查找

在这里插入图片描述

题解

1. 保证了l始终小于r, l + 1 == r
2.这样保证了a[l] < x, a[r] >= x,后续可以判断a[r] == x

代码

#include<iostream>
#include<vector>
#include<algorithm>

using ll = long long;
const int N = 2e5 + 10;
using namespace std;
int a[N];

void solve()
{
    int n = 0, q = 0;
    cin >> n >> q;
    for (int i = 1; i <= n; i++) cin >> a[i];

    while (q--)
    {
        int x;
        cin >> x;
        int l = 0, r = n;
        while (l + 1 != r)
        {
            int mid = l + (r - l) / 2;
            if (a[mid] < x) l = mid;
            else r = mid;
        }

        if (a[r] == x) cout << r << " ";
        else cout << -1 << " ";
    }
}

int main()
{
    solve();

    return 0;
}

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

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

相关文章

Typora软件(Markdown编辑器)详细安装教程(附补丁包)2025最详细图文教程安装手册

目录 前言&#xff1a;Typora是干什么的&#xff1f; 一、下载Typora安装包 二、安装Typora 1.运行安装程序 2.启动安装 3.创建桌面图标 4.开始安装 5.安装完成 三、安装补丁 1.解压补丁包 2.在解压后的补丁包目录下找到“winmm.dll” 3.复制“winmm.dll”到Typora安…

图谱洞见:专栏概要与内容目录

文章目录 图谱洞见&#x1f4da; 核心内容模块时空图模型研究综述与模型对比交通流量预测 知识图谱理论研究预训练语言模型与知识图谱知识图谱补全与链接预测知识蒸馏与知识表示关系建模与图卷积上下文感知与参数生成规则学习与推理可解释性研究因果推理 知识图谱实践应用数据库…

【拜读】Tensor Product Attention Is All You Need姚期智团队开源TPA兼容RoPE位置编码

姚期智团队开源新型注意力&#xff1a;张量积注意力&#xff08;Tensor Product Attention&#xff0c;TPA&#xff09;。有点像一种「动态的LoRA」&#xff0c;核心思路在于利用张量分解来压缩注意力机制中的 Q、K、V 表示&#xff0c;同时保留上下文信息&#xff0c;减少内存…

【电机控制器】ESP32-C3语言模型——DeepSeek

【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…

Linux修改主机名称

hostnamectl set-hostname 主机名称 exit 退出登录重新进入即可

STM32 看门狗

目录 背景 独立看门狗&#xff08;IWDG&#xff09; 寄存器访问保护 窗口看门狗&#xff08;WWDG&#xff09; 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…

一种简单有效的分析qnx+android智能座舱项目中的画面闪烁的方法(8155平台)

在智能座舱项目的开发过程中&#xff0c;画面闪烁问题是一个常见但棘手的挑战。由于这些闪烁现象往往转瞬即逝&#xff0c;传统的分析工具如截图、录屏或dump图层等方法难以捕捉和定位问题根源。针对这一难题&#xff0c;本文介绍了一种较为有效的分析方法&#xff0c;能够帮助…

ESP32 websocket-client

本文简介 ESP-IDF WebSocket-Client 实验平台 ①ESP-IDF 版本&#xff1a;release/v5.3.2 ③硬件平台&#xff1a;esp32-s3 版权声明 ①作者&#xff1a;coLin ②声明&#xff1a;问题总结&#xff0c;有误解&#xff0c;请联系纠正。 正文 1、基于 esp-idf 如何使用 …

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…

DeepSeek写俄罗斯方块手机小游戏

DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件&#xff1a; 核心功能要求 原生JavaScript实现&#xff0c;适配手机屏幕 …

DeepSeek 冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题&#xff0c;上线不足一月&#xff0c;其全球累计下载量已达4000万&#xff0c;反超ChatGPT成为全球增长最快的AI应用&#xff0c;并且完全开源。那么究竟DeepSeek有什么魔力&#xff0c;能够让大家趋之若鹜&#xff0c;他又将怎样改变世界AI格…

2025 WE DAY品牌日| 天璇II WE X7 Pro充电桩震撼发布,能效电气开启充电革命

随着新能源产业的迅猛发展,充电桩作为电动汽车能量补给的重要基础设施,正在成为市场关注的焦点。能效电气作为充电桩领域的佼佼者,专注于研发高效、智能的充电解决方案,为电动汽车的普及与可持续发展铺设了坚实的基础。 2025年2月21日,能效电气在深圳盛大举办了以“以创新 引未…

Python(二十二)实现各大跨境船公司物流查询CMA船司物流查询

一、前言 本章主要实现 【之前CMA船司物流信息查询】的遗留问题 解决思路 由于CMA船司查询需要进行[机器人验证] 方法1&#xff1a;直接从前端跳过&#xff0c;用selenium实现前端自动化&#xff0c;查询物流信息 方法2&#xff1a;捕捉到接口search&#xff0c;但需要将返回…

Ollama 安装

Ollama 支持多种操作系统&#xff0c;包括 macOS、Windows、Linux 以及通过 Docker 容器运行。 Ollama 对硬件要求不高&#xff0c;旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 CPU&#xff1a;多核处理器&#xff08;推荐 4 核或以上&#xff09;。GPU…

复习dddddddd

1. 思路&#xff1a;用队列先进先出的特性 #include <iostream> #include <vector> #include <stack> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cma…

大数据技术Kafka详解 ⑥ | Kafka大厂面试题

目录 1、为什么要使用kafka? 2、kafka消费过的消息如何再消费? 3、kafka的数据是放在磁盘上还是内存上&#xff0c;为什么速度会快? 4、kafka数据怎么保障不丢失? 4.1、生产者数据的不丢失 4.2、消费者数据的不丢失 4.3、kafka集群中的broker的数据不丢失 5、采集数…

Jupyter里面的manim编程学习

1.Jupyterlab的使用 因为我之前一直都是使用的vscode进行manim编程的&#xff0c;但是今天看的这个教程使用的是Jupyter&#xff0c;我也很是好奇这个manim在Jupyter这样的交互式下面会生成怎么样的效果&#xff0c;所以今天尝试了jupyter&#xff0c;并且对于两个进行比较和说…

hot100_19. 删除链表的倒数第 N 个结点

hot100_19. 删除链表的倒数第 N 个结点 思路 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head […

✨1.HTML、CSS 和 JavaScript 是什么?

✨✨ HTML、CSS 和 JavaScript 是构建网页的三大核心技术&#xff0c;它们相互协作&#xff0c;让网页呈现出丰富的内容、精美的样式和交互功能。以下为你详细介绍&#xff1a; &#x1f98b;1. HTML&#xff08;超文本标记语言&#xff09; 定义&#xff1a;HTML 是一种用于描…

机器学习的数学基础(三)——概率与信息论

目录 1. 随机变量2. 概率分布2.1 离散型变量和概率质量函数2.2 连续型变量和概率密度函数 3. 边缘概率4. 条件概率5. 条件概率的链式法则6. 独立性和条件独立性7. 期望、方差和协方差7.1 期望7.2 方差7.3 协方差 8. 常用概率分布8.1 均匀分布 U ( a , b ) U(a, b) U(a,b)8.2 Be…