当前位置: 首页 > news >正文

算法手记1

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022


目录

一.NC313 两个数组的交集

题目详情:

题目思路:

解题代码:

二.AB5 点击消除

题目详情:

题目思路:

解题代码:

结语


一.NC313 两个数组的交集

牛客网题目链接(点击即可跳转):NC313 两个数组的交集 

题目详情:

本题详情如下图:


题目思路:

本题解题思路如下:

        最开始想的是先用set去重然后再排序,然后再用双指针遍历这两数组就可以了.但是考虑到这个题型属于从一个数组里找某个数是否存在,用哈希就很合适啊,所以就先把其中一个数组放哈希表里,再遍历另一个数组去查就好了,查到了的结果放set里,或者查到一个从哈希表里删掉一个,都能达到去重的效果.


解题代码:

本题解题代码如下:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) 
    {
        int arr[1001]={0};
        for(auto e:nums1)
        {
            arr[e]=1;
        }
        vector<int> vi;
        for(auto e:nums2)
        {
            if(arr[e]==1)
            {
                vi.push_back(e);
                arr[e]=0;
            }
        }
        return vi;
    }
};

二.AB5 点击消除

牛客网题目链接(点击即可跳转):NC313 两个数组的交集 

题目详情:

本题详情如下图:


题目思路:

本题解题思路如下:

        经典括号匹配的变形题,变数在于要顺序输出栈里剩余元素,为了方便可以用一个string来模拟栈操作,单纯用栈的话就还得多一步把栈里元素倒出来的操作,用string可以直接输出.


解题代码:

本题解题代码如下:

#include <iostream>
using namespace std;

int main() 
{
    string s, ret;
    cin >> s;
    for (auto e : s) 
    {
        if (ret.empty() == false && e == ret[ret.size() - 1])
            ret.pop_back();
        else
            ret.push_back(e);
    }
    ret.empty() == true ? cout << 0 : cout << ret;
}


结语

        说点啥好呢...今天这两道题学到的最重要的东西就是要灵活运用数据结构,题目不难,但是利用数据结构把题变得非常简单还是没有想到,第一道用哈希找,明显比排序再双指针遍历时间复杂度低.第二道就是要对数据结构知其性而不拘于型,谁说栈的特性一定要用栈来实现?string明显更有利于得到结果.所以说一切都要灵活变通,加油,慢慢一天天进步吧!

http://www.dtcms.com/a/62790.html

相关文章:

  • 基于Java的面向对象的多态示例
  • Maven指定JDK
  • function call为大模型装上触手
  • Java中的分布式锁:原理、实现与最佳实践
  • webpack介绍
  • Android Compose Surface 完全指南:从入门到花式操作
  • 四种常见的 API 架构风格(带示例)
  • vue2中,在table单元格上右键,对行、列的增删操作(模拟wps里的表格交互)
  • 无人机全景应用解析与技术演进趋势
  • AI开源竞赛与硬件革命:2025年3月科技热点全景解读——阿里、腾讯领跑开源,英特尔、台积电重塑算力格局
  • 考研数学复习之定积分定义求解数列极限(超详细教程)
  • HTML5教程之标签(7)
  • Java关键字与标识符
  • 基于6自由度搬运机器人完成单关节伺服控制实现的详细步骤及示例代码
  • 基于YOLO11深度学习的遥感视角地面房屋建筑检测分割与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能
  • 【GNN】第四章:图卷积层GCN
  • Linux 服务器安全配置:密码复杂度与登录超时设置
  • 缓存id路由页面返回,历史路由栈
  • SpringBoot基础Kafka示例
  • 深度学习subword分词BPE
  • 在 DEM 中模拟粒子破损
  • 领域驱动设计(DDD)是什么?
  • 深度剖析Redis:双写一致性问题及解决方案全景解析
  • Vue3实战学习(Vue3集成Vue-Router(路由跳转、编程式路由跳转。路由跳转的单参数、多参数传递。设置默认页面路由))(上)(7)
  • 位运算的应用3(获取⼆进制中的指定位、leetcode 190.颠倒二进制位)
  • Word 小黑第15套
  • Linux_16进程地址空间
  • 音视频软件工程师面试题
  • JDK安装过程中误删path怎么办?
  • 开发、科研、日常办公工具汇总(自用,持续更新)