vector 容器相关的练习

news2024/12/28 5:35:48

目录

一、只出现一次的数字

二、只出现一次的数字 II

三、只出现一次的数字 III

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

五、杨辉三角

六、数组中出现次数超过一半的数字

七、电话号码的字母组合



一、只出现一次的数字

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ans = nums[0];
        for (size_t i = 1; i < nums.size(); ++i)
        {
            ans ^= nums[i];
        }
        return ans;
    }
};


二、只出现一次的数字 II

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ans = 0;
        // 求只出现一次的数字的二进制表示的每一位
        for (size_t i = 0; i < 32; ++i)
        {
            size_t cnt = 0;
            // 遍历整个数组,统计第 i 位为 1 的数字的个数
            for (size_t j = 0; j < nums.size(); ++j)
            {
                if (nums[j] & (1 << i))
                    ++cnt;
            }
            
            if (cnt % 3 == 1)  // cnt 为 1,或者为 1 + 3 * k
                ans |= (1 << i);
        }
        return ans;
    }
};


三、只出现一次的数字 III

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        vector<int> v(2);
​
        int res = nums[0];
        for (size_t i = 1; i < nums.size(); ++i)
        {
            res ^= nums[i];
        }
​
        // 找到 res 的二进制表示中最低位的 1 的位置
        size_t pos = 0;
        for (size_t i = 0; i < 32; ++i)
        {
            if (res & (1 << i))
            {
                pos = i;
                break;
            }
        }
​
        // 根据第 pos 位是否为 1 将 nums 分为两组
        for (size_t i = 0; i < nums.size(); ++i)
        {
            if (nums[i] & (1 << pos))
                v[0] ^= nums[i];
            else
                v[1] ^= nums[i];
        }
        return v;
    }
};


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

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


五、杨辉三角

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> vv(numRows);
​
        for (size_t i = 0; i < numRows; ++i)
        {
            vv[i].resize(i + 1, 0);
            vv[i][0] = vv[i][i] = 1;
​
            if (i >= 2)
            {
                for (size_t j = 1; j < i; ++j)
                {
                    vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j];
                }
            }
        }
​
        return vv;
    }
};

图解

  1. 定义一个包含 numRows 个元素的动态二维数组 vv,每个元素的类型都是 vector<int>

    vector<vector<int>> vv(numRows);

    假设 numRows 等于 5。

  2. 生成杨辉三角的前 numRows 行。

     


六、数组中出现次数超过一半的数字

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int>& numbers) {
        int candidate = numbers[0];
        int chance = 1;
        for (size_t i = 1; i < numbers.size(); ++i)
        {
            if (chance != 0)
            {
                if (candidate == numbers[i])
                    ++chance;
                else
                    --chance;
            }
            else
            {
                candidate = numbers[i];
                chance = 1;
            }
        }
        return candidate;
    }
};
  1. 思路

    如果两个数字不相等,就消去这两个数,由于数组中有一个数字出现的次数超过数组长度的一半,即众数,那么即便在最坏情况下,每次消去一个众数和非众数,最后留下来的数也一定是众数。

  2. 具体操作

    在遍历数组时保存两个值,分别是众数的候选者 candidate 以及其所剩的机会 chance。当我们遍历到下一个元素的时候,如果下一个元素和候选者相等,则机会加 1,如果不相等,则机会减 1,即消去这两个不相同的数字。如果遍历到下一个元素的时候,机会为 0,即意味着需要重新选候选人了。


七、电话号码的字母组合

class Solution {
public:
    string map[10] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
​
    void combine(const string& digits, size_t level, string combination, vector<string>& v)
    {
        if (level == digits.size())
        {
            v.push_back(combination);
            return;
        }
​
        int number = digits[level] - '0';
        string s = map[number];
        for (size_t i = 0; i < s.size(); ++i)
        {
            combine(digits, level + 1, combination + s[i], v);
        }
    }
​
    vector<string> letterCombinations(string digits) {
        vector<string> v;
        if (digits.empty())
            return v;
​
        combine(digits, 0, "", v);
        return v;
    }
};

解析(示例一)

levelnumbers
02"abc"
13"def"

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

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

相关文章

springboot()—— springboot整合mybatis

总结&#xff1a; 和SSM相比&#xff0c; 1&#xff09;导入的包不同 2&#xff09;不再有mybatis的核心配置文件了&#xff0c;也不同单独写db.properties了&#xff0c;以前“开启二级缓存&#xff0c;起别名”等在核心配置文件里的配置全都配置到application.properties里…

前端实现文件上传的方式

这个文章总结了四种前端上传文章的方式 <inputtype"file"multipleonChange{(e) > {const c [].slice.call(e.target.files);console.log(e.target.files, e.target.files);console.log(e.target.files.arrary, c);const v new FormData();v.append(file, c[…

K8S初级入门系列之九-共享存储

一、前言 Pod里面的容器都有自己独立的文件系统&#xff0c;来自容器镜像&#xff0c;用于保存容器运行的数据&#xff0c;但容器的文件存储有两个弊端&#xff0c;一个是无法持久化&#xff0c;其生命周期与容器一致&#xff0c;一旦容器销毁&#xff0c;相关的数据也就随之一…

0134 数据的表示和运算3

目录 2.数据的表示和运算 2.3浮点数的表示与运算 2.3部分习题 2.数据的表示和运算 2.3浮点数的表示与运算 2.3部分习题 1.下列关于对阶操作&#xff0c;正确的是&#xff08;&#xff09; A.在浮点加减运算的对阶操作中&#xff0c;若阶码减小&#xff0c;则尾数左移 …

pytorch工具——认识pytorch

目录 pytorch的基本元素操作创建一个没有初始化的矩阵创建一个有初始化的矩阵创建一个全0矩阵并可指定数据元素类型为long直接通过数据创建张量通过已有的一个张量创建相同尺寸的新张量利用randn_like方法得到相同尺寸张量&#xff0c;并且采用随机初始化的方法为其赋值采用.si…

数值线性代数:知识框架

记录数值线性代数研究的知识框架。 软件包线性方程组直接法Guass消元法/LU分解、Cholesky分解 LAPACK oneAPI MKL ARPACK Octave 迭代法Jacobi迭代、SOR迭代、共轭梯度法最小二乘特征值/特征向量非对称幂法、QR、Arnoldi分解对称QR、Jacobi、二分法、分治法、SVD 参考资料 G…

【C语言day03】

参数a是指针&#xff0c;要接收地址&#xff0c;BD错误。参数b可以接收的是char*&#xff0c;而&c的类型是char(*)[10]&#xff0c;C错误全局变量i&#xff0c;在main()中修改为5&#xff0c;第一次在prt()中执行循环输出三次*&#xff0c;i被修改为8&#xff0c;回到main(…

MyBatis学习笔记——3

MyBatis学习笔记——3 一、MyBatis小技巧1.1、#{}和${}1.2、typeAliases1.3、mappers1.4、插入数据时获取自动生成的主键 二、MyBatis参数处理2.1、单个简单类型参数2.2、 Map参数2.3、实体类参数2.4、多参数2.5、 Param注解&#xff08;命名参数&#xff09;2.6、 Param源码分…

网络安全(黑客)就业分析指导

一、针对网络安全市场分析 市场需求量高&#xff1b;则是发展相对成熟入门比较容易。所需要的技术水平国家政策环境 对于国家与企业的地位愈发重要&#xff0c;没有网络安全就没有国家安全 更有为国效力的正义黑客—红客联盟 可见其重视程度。 需要掌握的知识点偏多 外围打点…

【全面解析】Windows 如何使用 SSH 密钥远程连接 Linux 服务器

创建密钥 创建 linux 服务器端的终端中执行命令 ssh-keygen&#xff0c;之后一直按Enter即可&#xff0c;这样会在将在 ~/.ssh/ 路径下生成公钥(id_rsa.pub)和私钥(id_rsa) 注意&#xff1a;也可以在 windows 端生成密钥&#xff0c;只需要保证公钥在服务器端&#xff0c;私钥…

30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行

day 1 工具&#xff1a;qemu 模拟器 今日任务 计算机启动后&#xff0c;在屏幕打印一串字符串。 理论 显示字符的原理 把一些机器指令写在第一扇区。通过int 0x10中断&#xff0c;让显卡在屏幕上显示字符。只需要在0x10之前按照规定准备好寄存器&#xff0c;显卡就能正确…

2020年下半年系统架构设计师考试案例分析真题(参考答案)

试题一 1、阅读以下关于软件架构设计与评估的叙述&#xff0c;在答题纸上回答问题1和问题2。 [说明] 某公司拟开发--套在线软件开发系统&#xff0c;支持用户通过浏览器在线进行软件开发活动。该系统的重要功能包括代码编辑、语法高亮显示、代码编译、系统调试、代码仓库管理等…

Spring数据源

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE、Spring 目录 1、简介2、作用3、开发步骤3.1、导入坐标3.2、创建对象c3p0druid提取jdbc.properties读取配…

【iOS】App仿写--3GShare

文章目录 前言一、账号界面二、主页界面二、搜索界面三、文章界面四、活动界面五、我的界面总结 前言 这周写了3GShare的demo&#xff0c;这是一个十分麻烦的demo&#xff0c;比网易云需要设计的知识更多&#xff0c;特此撰写一下博客记录总结 一、账号界面 这里账号界面主要…

SourceTree使用ssh密钥

设置Git的user name和email&#xff1a; $ git config --global user.name "xxx" $ git config --global user.email "xxx.mailxxx.com".检查是不是已经存在密钥&#xff08;能进去说明已经存在&#xff0c;就删掉文件夹&#xff0c;重新创建&#xff09;…

SPSS数据文件的结构重组

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件可在个人主页—…

python:GEDI 波形数据提取

作者:CSDN @ _养乐多_ 在这篇博客中,我们将介绍如何使用 Python 处理和可视化 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据。GEDI 是 NASA(美国国家航空航天局)推出的激光雷达地球观测任务,用于获取全球各地生态系统的三维结构信息。本文将以提取研究区…

VSCode同时编译多个C文件

一.环境说明 1.系统&#xff1a;Ubuntu 22.04.2 LTS 2.Visual Studio Code: 1.80.1 二.问题描述 今天使用VSCode编译《Programming Abstractions In C》书中的gymjudge.c代码时遇到错误&#xff0c;错误提示为&#xff1a; (base) codistspc:~/projects/Programming-Abstracti…

Ubuntu下打开QtCreator环境变量LD_LIBRARY_PATH与终端不一致

问题描述&#xff1a; 在unbuntu下使用QtCreator编译、运行程序时&#xff0c;总是出现XXX.so: cannot open shared object file: No such file or directory这类问题&#xff0c;但是在终端中编译或者运行程序则不会出现这些问题。在网上查了好久才明白QtCreator在打开时&…

【Visual Studio】Qt 在其他 cpp 文件中调用主工程下文件中的函数

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 还整了一个如何在其他文件中调用 ui 控件的文章&#xff0c;感兴趣可以看&#xff1a;【Visual Studio】Qt 在其他 cpp 文件中调用操作 ui 界面控件。 文章目…