【C++】vector习题

news2024/9/19 20:55:07

一、杨辉三角

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
    }
};

 这里给你一个vector<vector<int>>类型

也就是说vector中的各个数据,存的是各个不同的vector

思路:先给vector开空间,然后给vector中的vector开空间,并且初始化

最后根据数学关系找规律

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv;
        vv.resize(numRows);
        for(int i = 0;i < numRows; i++)
        {
            vv[i].resize(i+1,0); 
            vv[i][i] = 1;
            vv[i][0] = 1;
        }

        for(int i = 2;i < vv.size();i++)
        {
            for(int j = 1;j<vv[i].size()-1;j++)
            {
                vv[i][j] = vv[i-1][j-1]+vv[i-1][j];
            }
        }
        return vv;
    }
};

二、删除有序数组中的重复项 

 

法一:

就是简便的比较,如果相等则删除,又因为erase函数,删除后,后面的数据往前移动,所以比较的下标要不变

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int count = nums.size();
        std::vector<int>::iterator it = nums.begin();
        //1 1 1
        for (int i = 0; i < nums.size(); i++)
        {//
            for (int j = i + 1; j < nums.size(); j++)
            {
                if (nums[i] == nums[j])
                {
                    count--;
                    nums.erase(it + j);
                    j--;
                }
            }
        }
        return count;
    }
};

 法二:

双指针

思路:

如果有fast前后是相同的数字,slow指针不移动,直到fast指针找到不相同的数,再向前移动slow 

 

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
};

三、只出现一次数据② 

这里是参考比特老师所写的方法------> 这个方法简直妙蛙种子吃了妙脆角走进了米奇妙妙屋  

想法思路真是太妙了 

题目说:只有一个数字出现一次,其余数字均出现3次,假设数组为{3,5,3,3}
通过分析可知:
3的二进制:0 0 0 0 0 0 1 1
5的二进制:0 0 0 0 0 1 0 1
3的二进制:0 0 0 0 0 0 1 1
3的二进制:0 0 0 0 0 0 1 1
          0 0 0 0 0 1 3 4  二进制1的总数
对于出现3次的数字,各位出现的次数都是3的倍数,因此对统计的为1的比特总数%3
          0 0 0 0 0 1 0 1 = 5
          结果就是只出现一次的数字
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ans = 0;
        for (int i = 0; i < 32; ++i) {
            // 统计该每个数字第i个比特位为1的总数
            int total = 0;
            for (int num : nums) {
                total += ((num >> i) & 1);//太妙了
            }
            // 如果total能够被3整除,说明只出现一次的数字在该位置上一定是0
            // 否则在该位置上一定是1
            if (total % 3) {
                ans |= (1 << i);//太妙了
            }
        }
        return ans;
    }
};

有操作符概念不了解的可以从下面这篇文章了解一下 

http://t.csdnimg.cn/APANq

total += ((num >> i) & 1);

ans |= (1 << i);这里就好比给32位比特位全为0,哪个位置需要改就在哪里换个1,最后就是那一个数

特别是这两行代码写的真是太妙了

. - 力扣(LeetCode) 

四、只出现一次数据③

 参考leetcode的大佬所写

大佬们的方法简直就是--妙蛙种子吃了妙脆角走进了米奇妙妙屋 

 

class Solution {
public:
    vector<int> singleNumber(vector<int> &nums) {
        unsigned int x = 0;
        for(int e : nums)
        {
            x ^= e;
        }
        int x1 = x & (-x);
        int type1 = 0,type2 = 0;
        for (int e: nums) {
            if (e & x1) {
                type1 ^= e;
            }
            else {
                type2 ^= e;
            }
        }
        return {type1, type2};
    }
};

这里采用的是

异或做法---->前面也有提过

a^a = 0

a^a^b = b

 下面我就开始讲一下这位灵茶山艾府大佬的代码与leetcode官方代码的结合版

首先为什么用unsigned int x = 0;直接用int不就好了吗?先带着这个问题往下看

我们把所有数据都异或一遍后,因为相同的数异或为0,只剩下两个单身狗设为x1,x2

也就是说第一个循环走完以后unsigned int x = x1^x2

我们得出x(也就是x1与x2的混合体),要混合体有什么用我们要的是单独的x1与x2,如何把这个混合体分开?

因为异或,性质是相同为0相异为1,也就是说x中二进制位中的一个1,也就是x1与x2不同的位数(要么x1这个位数为1,要么x2中这个位数为0,或者x1这个位数为0,x2这个位数为1):举个例子

6的二进制是 0110

10                 1010

异或为           1100

我们知道这个了以后,只保留二进制最低位的1

x = 1100

~x = 0011

~x+1 = 0100 根据补码的定义就是-x      如果 数据是-1 -1 0 -2147483648对-2147483648取负,数据就溢出了,所以这里取unsigned int

& 按位与 (只有0就是0,两个同时为1才是1

(x & -x) =  0100   我们得到二进制最低位的1

之后就是分组,分组的根据是什么?分组能把x1与x2分开且对于其他数没有任何影响,反正最后异或后都为0

最后就是找单身狗的问题 

 

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

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

相关文章

嘉德立为您解析任务调度控制台的核心功能

在当今高度信息化与自动化的时代背景下&#xff0c;任务调度控制台作为系统管理与运维的核心工具&#xff0c;正日益成为提升企业运营效率、保障业务连续性的关键所在。任务调度控制台&#xff0c;顾名思义&#xff0c;是一个集中管理、监控与调度各类任务的平台&#xff0c;它…

智能爬虫ScrapeGraphAI尝鲜

ScrapeGraphAI是一个创新的Python库&#xff0c;它融合了大型语言模型&#xff08;LLM&#xff09;和直接图逻辑&#xff0c;为用户提供了一种高效的方法&#xff0c;用于构建针对网站、文档和XML文件的爬虫流水线。以下是关于ScrapeGraphAI的详细介绍&#xff1a; 一、核心特…

【简历】黑龙某一本大学:JAVA秋招简历指导,面试通过率低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届黑龙江某一本大学的java简历。校招第一法则就是我们一定要先定求职层次&#xff0c;是大厂中厂还是小厂。因为校招时间点和…

达梦数据库(九) -------- JAVA 的连接配置方式

连接单机数据库配置如下&#xff1a; 集群配置连接如下&#xff1a; 在 dm_svc.conf 文件中配置服务名&#xff0c;通过服务名连接集群可实现故障自动重连。 Window 环境 Windows 平台 dm_svc.conf 文件位 %SystemRoot%\system32 目录下&#xff1a; Linux 环境 Linux 平台…

分布式任务调度与计算框架PowerJob

PowerJob是一款基于Java开发的企业级分布式任务调度与计算框架&#xff0c;它旨在为企业级应用提供统一的调度中心和分布式计算能力&#xff0c;从而简化任务调度的复杂性并降低分布式计算的门槛。 以下是对PowerJob的详细介绍&#xff1a; 一、主要功能特性 使用简单&#x…

Java面试题精选:消息队列(一)

1、为什么使用消息队列 问题用意&#xff1a; 其实就是想问一下消息队列有哪些使用场景&#xff0c;你项目中什么业务场景用到了消息队列&#xff0c;有什么技术挑战。使用MQ后给你带来了什么好处 规范回答&#xff1a; 消息队列的常见使用场景很多&#xff0c;但比较核心的…

WPF学习(12)-Image图像控件+GroupBox标题容器控件

Image图像控件 Image也算是独门独户的控件&#xff0c;因为它是直接继承于FrameworkElement基类。 Image控件就是图像显示控件。Image类能够加载显示的图片格式有.bmp、.gif、.ico、.jpg、.png、.wdp 和 .tiff。要注意的是&#xff0c;加载.gif动画图片时&#xff0c;仅显示第…

58 mysql 存储引擎之 MEMORY

前言 我们这里来看一下 MEMORY 存储引擎, 我们常见的那些 临时表什么的, 都是基于 MEMORY 在之前 我们也曾经调试过 相关内存临时表的信息 它主要是 使用 hp_scan, hp_find_record 等等 api 来操作内存中的信息 我们这里基于 information_schema.TABLES 这张基于 MEMORY 的…

6.3.面向对象技术-设计模式

设计模式 设计模式创建型模型速记口诀 结构型设计模式速记口诀 行为型设计模式速记口诀 练习题 设计模式 上午2-4分&#xff0c;记忆点很多 要具体了解推荐看书籍《大话设计模式》 架构模式&#xff1a;软件设计中的高层决策&#xff0c;例如C/S结构就属于架构模式&#xff0…

赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!

八月开端&#xff0c;由知无不言与xmars和钱老师课堂联合主办的2024年AI科技大会暨亚马逊新增长大会在深圳宝安顺利开展&#xff0c;为期2天的跨境峰会吸引了上千位优秀的卖家朋友前来感受一场盛夏大狂欢。在本次跨境峰会里&#xff0c;邀请了多位不同领域的先锋人物&#xff0…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.4】导出RKNN模型(第一部分:模型修改)更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 基础…

挖矿木马攻破了服务器

最近被国外的挖矿木马攻破了服务器 根据非法登录&#xff0c;用 #last指令查看登录ip 首先删掉登录主机 #kill -9 pts/0 第二步 #top 看看什么占用cpu高 第三步杀死狂刷CPU的服务 过一分钟后&#xff0c;服务又开始狂刷cpu。 第四步根据pid查到服务地址 #systemctl status…

frameworks 之ServiceManager

frameworks 之ServiceManager 解析启动入口启动AIDL实现类客户端Bp发送讲解1. 获取 BpServiceManager创建代理类 ServiceManagerShim 返回调用对应AIDL方法调用驱动通知 服务端Bn接收讲解注册Binder回调监听Binder消息处理 备注 ServiceManager 作为android中的路由器提供服务注…

正则表达式扩展应用

使用扩展正则表达式 egrep 首先来看一条前面章节学习过的用来去除空白行和注释行的指令&#xff1a; grep -v ^$ regular_express.txt |grep -v ^# 可见&#xff0c;通常的 grep 指令需要使用两次管线命令。那么如果使用扩展正则表达式&#xff0c;则可以简化为&#xff1a;…

4K YouTube to MP3 Pro:跨平台音频提取与转换的好用工具

4K YouTube to MP3 Pro是一款专为追求高品质音频体验的用户设计的跨平台&#xff08;支持Mac与Windows&#xff09;音频提取与转换软件。该软件以其卓越的音频提取能力和简便的操作流程&#xff0c;在同类产品中脱颖而出&#xff0c;成为众多用户的心头好。 功能强大&#xff…

股吧评论自动采集工具推荐,一学就会

股市波动无常&#xff0c;股民情绪更是难以捉摸。但想象一下&#xff0c;如果能即时掌握东方财富网股吧里股民的热议话题与情绪倾向&#xff0c;那将对您的投资决策带来怎样的影响&#xff1f;本文将为您揭晓一款易于上手的股民评论自动采集工具&#xff0c;助您把握市场脉搏&a…

钉耙编程(5)

1008 猫咪们狂欢 分析&#xff1a; 会创建一个二分图 代码&#xff1a; #include <bits/stdc.h> #define ll long long #define INF 1e9 using namespace std; const int N10005; const int M100010; struct edge{ll v,c,ne; }e[M]; int h[N],idx1; int d[N],cur[N]; …

武汉流星汇聚:跨境电商行业的快速崛起者,以实力与口碑铸就辉煌

在跨境电商这片充满机遇与挑战的蓝海中&#xff0c;武汉流星汇聚电子商务有限公司如同一颗迅速升起的新星&#xff0c;以其独特的经营模式、专业的服务团队和卓越的业绩表现&#xff0c;在短短几年内实现了跨越式的发展&#xff0c;成为了业界内外瞩目的焦点。 自2019年成立以…

【重要通知】关于公众号、淘宝店铺、CSDN等平台更名的公告

尊敬的粉丝/用户朋友们&#xff1a; 您们好&#xff01; 感谢您一直以来对我们平台的支持与信任&#xff01;由于我们已经取得了作品登记证书&#xff0c;平台的名称和登记证书著作权人名称不一致&#xff0c;在打击盗版、防伪标识方面&#xff0c;对我们造成了一定的困扰 &am…

【漏洞复现】某赛通数据泄露防护(DLP)系统 NetSecConfigAjax SQL注入漏洞

0x01 产品简介 某赛通新一代数据泄露防护系统&#xff08;简称 DLP&#xff09;&#xff0c;以服务企事业单位进行数据资产梳理、数据安全防护为目标。系统采用平台化管理&#xff0c;将终端DLP、网络DLP、邮件DLP、存储扫描DLP、API 接口DLP 进行统一管理&#xff0c;模块化控…