C++初阶:vector相关练习

目录

  • 1. 只出现一次的数
  • 2. 杨辉三角
  • 3. 删除有序数组中的重复项
  • 4. 只出现一次的数II
  • 5. 只出现一次的数III
  • 6. 数组中出现次数超过一半的数
  • 7. 电话号码的字母组合(多叉树遍历)

1. 只出现一次的数

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    只出现一次的数
  3. 思路:位运算规律,a ^ a = 0,0 ^ a = a
class Solution 
{
public:
    int singleNumber(vector<int>& nums) 
    {
        int num = 0;
        for(auto e : nums)
        {
            num ^= e;
        }

        return num;
    }
};

2. 杨辉三角

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    杨辉三角
  3. 思路:将vector初始化为0,然后再将首尾处理为1,当num[i][j]为0时,nums[i][j] = nums[i - 1][j] + nums[i - 1][j - 1]
class Solution 
{
public:
    vector<vector<int>> generate(int numRows)
    {
        vector<vector<int>> vv;
        vector<int> v1(1, 1);
        vv.push_back(v1);
        if (numRows == 1)
        {
            return vv;
        }

        v1.push_back(1);
        vv.push_back(v1);
        if (numRows == 2)
        {
            return vv;
        }

        vector<int> v2(v1);
        for (int i = 1; i < numRows - 1; i++)
        {
            v2.push_back(1);
            for (int j = 1; j < v2.size() - 1; j++)
            {
                v2[j] = vv[i][j - 1] + vv[i][j];
            }
            vv.push_back(v2);
            v1 = v2;
        }

        return vv;
    }
};

优化:

class Solution 
{
public:
    vector<vector<int>> generate(int numRows) 
    {
        vector<vector<int>> ret;
        for(int i = 0; i < numRows; i++)
        {
            ret.push_back(vector<int>(i + 1));
            ret[i].front() = ret[i].back() = 1;
        }

        for(int i = 0; i < numRows; i++)
        {
            for(int j = 0; j < ret[i].size(); j++)
            {
                if(ret[i][j] == 0)
                {
                    ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
                }
            }
        }

        return ret;
    }
};

3. 删除有序数组中的重复项

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    删除有序数组中的重复项
  3. 思路:
    <1> 挪移覆盖法O(n^2)
    <2> 双指针法(快排),前提条件:有序

在这里插入图片描述

class Solution 
{
public:
    int removeDuplicates(vector<int>& nums) 
    {
        //双指针法
        int cur = 1;
        int pre = 0;

        while(cur < nums.size())
        {
            if(nums[pre] != nums[cur])
            {
                pre++;
                nums[pre] = nums[cur];
            }
            cur++;
        }

        return pre + 1;
    }
};

4. 只出现一次的数II

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    只出现一次的数II
  3. 思路:遍历计数法
class Solution 
{
public:
    int singleNumber(vector<int>& nums) 
    {
        sort(nums.begin(), nums.end());
        int count = 1;
        int i = 0;
        for(i = 0; i + 1 < nums.size(); i++)
        {
            if(nums[i] == nums[i + 1])
            {
                count++;
            }
            else
            {
                if(count != 3)
                {
                    break;
                }
                count = 1;
            }
        }

        return nums[i];
    }
};

5. 只出现一次的数III

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    只出现一次的数III
  3. 思路:排序 + 遍历计数
class Solution 
{
public:
    vector<int> singleNumber(vector<int>& nums) 
    {
        vector<int> v;
        sort(nums.begin(), nums.end());
        int count = 1;
        for(int i = 1; i < nums.size(); i++)
        {
            if(nums[i - 1] == nums[i])
            {
                count++;
            }
            else
            {
                if(count == 1)
                {
                    v.push_back(nums[i - 1]);
                }

                if(i == nums.size() - 1 && nums[i - 1] != nums[i])
                {
                    v.push_back(nums[i]);
                }

                count = 1;
            }
        }

        return v;
    }
};

6. 数组中出现次数超过一半的数

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    数组中出现次数超过一半的数
  3. 思路:排序 + 计数遍历
class Solution 
{
public:
    int MoreThanHalfNum_Solution(vector<int>& numbers) 
    {
        sort(numbers.begin(), numbers.end());
        int num = numbers[0];
        int count = 1;
        for(int i = 0; i + 1 < numbers.size(); i++)
        {
            if(count > numbers.size() / 2)
            {
                break;
            }

            if(numbers[i] != numbers[i + 1])
            {
                num = numbers[i + 1];
                count = 1;
            }
            else 
            {
                count++;
            }
        }

        return num;
    }
};

7. 电话号码的字母组合(多叉树遍历)

  1. 题目信息:
    在这里插入图片描述
  2. 题目链接:
    电话号码的字母组合
  3. 思路:多叉树遍历,递归:递归子函数的参数(递归需要的参数),递归的结束条件
class Solution
{
public:
	string data[10] = { "","","abc", "def","ghi","jkl","mno","pqrs","tuv","wxyz" };

    //先层数+1,再插入
    //count第几层
	void combine(vector<string>& ret, string& digits, int count, const string& ans)
	{
		//返回条件控制,什么时候返回
		if (count == digits.size())
		{
			ret.push_back(ans);
			return;
		}

		//多叉树遍历操作
		//pos第几个
		for (int pos = 0; pos < data[digits[count] - '0'].size(); pos++)
		{
			//字符串拼接,不更改原本的值,多次使用
			combine(ret, digits, count + 1, ans + data[digits[count] - '0'][pos]);
		}
	}

	vector<string> letterCombinations(string digits)
	{
		vector<string> ret;

		//特殊处理
		if (digits.size() == 0)
		{
			return ret;
		}

		//层数,当层的哪个字符
		//第几个答案,组成结果多次使用不可更改原值
		string ans;
		int count = 0;
		combine(ret, digits, count, ans);

		return ret;
	}
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】flask服务端响应与重定向处理

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Leetcode 3.15

Leetcode hot100 二叉树1.二叉搜索树中第K小的元素2.二叉树展开为链表3.从前序与中序遍历序列构造二叉树 二叉树 1.二叉搜索树中第K小的元素 二叉搜索树中第K小的元素 最重要的知识点&#xff1a;二叉树搜索树的中序遍历是升序的。 方法一&#xff1a;我们只需存储升序遍历&…

【蓝桥杯备赛】Day15:递推与递归(倒计时23天)

题目1:题目 2335: 信息学奥赛一本通T1422-活动安排 设有n个活动的集合E{1,2,…,n}&#xff0c;其中每个活动都要求使用同一资源&#xff0c;如演讲会场等&#xff0c;而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi…

管易云·奇门对接打通金蝶云星空发货单查询接口与销售出库新增接口

管易云奇门对接打通金蝶云星空发货单查询接口与销售出库新增接口 ​​ ​​ 对接源平台:管易云奇门 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌&#xff0c;总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-W…

HarmonyOS卡片刷新服务,信息实时更新一目了然

如今衣食住行娱乐影音等App占据了大多数人的手机&#xff0c;一部手机可以满足日常大多需求&#xff0c;但对需要经常查看或进行简单操作的场景来说&#xff0c;总需要用户点开App操作未免过于繁琐。 针对该问题&#xff0c; HarmonyOS SDK为用户提供了Form Kit&#xff08;卡…

为啥很多人觉得编程难学?

看到推特上网友菜脯写的一条推文&#xff1a; 菜脯&#xff1a;我大概知道&#xff0c;为啥很多人觉得编程难学了。 因为对我来说&#xff0c;编程过程就是 看资料——开始写——遇到问题——查资料——解决问题——继续写——继续遇问题——继续查资料… 这个循环似乎会一直持…

Retrieval Augmented Thoughts(RAT):检索增强思维,实现长视野生成中的上下文感知推理

论文地址&#xff1a;https://arxiv.org/pdf/2403.05313.pdf 原文地址&#xff1a;rat-retrieval-augmented-thoughts Github&#xff1a;Implementation of RAT 2024 年 3 月 14 日 介绍 让我首先从一些一般性观察开始...... 在生成式人工智能应用程序中实现效率与生成响应…

vulhub中Apache Shiro 认证绕过漏洞复现(CVE-2010-3863)

Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 在Apache Shiro 1.1.0以前的版本中&#xff0c;shiro 进行权限验证前未对url 做标准化处理&#xff0c;攻击者可以构造/、//、…

YOLOV9训练自己的数据集

1.代码下载地址GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 2.准备自己的数据集 这里数据集我以SAR数据集为例 具体的下载链接如下所示&#xff1a; 链接&#xff1a;https:/…

广州市高质量发展大会,东纺企服系统提出数智化新思路

近日&#xff0c;广州市海珠区凤阳街道高质量发展大会暨企业联盟沙龙荟在海珠区珠江国际纺织城D区6楼时尚馆召开。东纺科技作为海珠区企业代表&#xff0c;受邀出席参与活动。 本次大会对今年的高质量发展进行亮诺和展望。海珠区委常委、区纪委书记、区监委主任杨清谦以及海珠区…

【环境搭建和安装】thingsboard二次开发环境搭建

文章目录 1.安装JAVA2.安装maven环境3.安装nodeJS4.安装git环境5.安装npm依赖关系 提示&#xff1a; 1.我自己下载存放路径比较混乱&#xff0c;下载的文件尽量在一个新建的文件夹存放&#xff0c;目录全英更好。 2.环境是为了开源物联网平台&#xff0c;环境搭建和安装部署是成…

ETH网络 之 Gas花费实例

求关注&#xff0c;关注我&#xff0c;一起进入Web3的世界 前文回顾 GasBaseFee & PriorityFee部署ERC-721 交易Gas解析 部署NFT的交易 钱包Gas解读 费用清单 ItemValueDesc基础费用(BaseFee)0.102349622 Gwei基础费用是动态的&#xff0c;我们发送交易时是不确定的&…

想进阿里?先了解这个!@SpringMybatis注解面试解析

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”! 嗨,大家好!我是小米,今天要和大家聊一聊阿里巴巴面试题中的一个热门话题:@SpringMybatis注解。如果你是一个对技术充满好奇心的小伙伴,那么这篇文章一定会给你带来不少启发和收获! 在开始…

1、编写jsp文件,熟悉jsp页面的基本结构H编写看电影2、编写jsp文件,熟悉jsp动作标记、param传值的使用,计算机三角形的面积。

1、看电影 watchMovie.jsp: <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert ti…

数据分析能力模型分析与展示

具体内容&#xff1a; 专业素质 专业素质-01 数据处理 能力定义•能通过各种数据处理工具及数据处理方法&#xff0c;对内外部海量数据进行清洗和运用&#xff0c;提供统一数据标准&#xff0c;为业务分析做好数据支持工作。 L1•掌握一…

41 物体检测和目标检测数据集【李沐动手学深度学习v2课程笔记】

目录 1. 物体检测 2. 边缘框实现 3.数据集 4. 小结 1. 物体检测 2. 边缘框实现 %matplotlib inline import torch from d2l import torch as d2ld2l.set_figsize() img d2l.plt.imread(../img/catdog.jpg) d2l.plt.imshow(img);#save def box_corner_to_center(boxes):&q…

小白向软件开发教学实战:企业培训APP的设计与开发

随着信息技术的迅猛发展&#xff0c;软件开发已经成为了一个日益重要的技能。无论是个人还是企业&#xff0c;都希望能够掌握一定的软件开发能力&#xff0c;以满足自身的需求。尤其是在企业培训领域&#xff0c;定制化的软件应用能够提高培训效率和质量。 一、需求分析 在设计…

Vue.js前端开发零基础教学(二)

目录 前言 2.1 单文件组件 2.2 数据绑定 2.2.2 响应式数据绑定 2.3 指令 2.3.1 内容渲染指令 2.3.2 属性绑定指令 ​编辑 2.3.3 事件绑定指令 2.3.4 双向数据绑定指令 2.3.5 条件渲染指令 2.3.6 列表渲染指令 2.4 事件对象 2.5 事件修饰符 学习目标&am…

#Linux(帮助手册)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;键入命令man man查看手册目录&#xff08;按q退出&#xff09; &#xff08;2&#xff09;查看手册需要先安装依赖包&#xff08;root权限安…

【spring】@ConditionalOnResource注解学习

ConditionalOnResource 介绍 ConditionalOnResource 是Spring框架中的一个条件化注解&#xff0c;它允许你根据类路径中是否存在指定的资源来决定是否加载特定的Bean定义或配置类。这个注解可以用于类级别或方法级别。 具体Conditional使用请看这篇文章【spring】Conditional…