0
点赞
收藏
分享

微信扫一扫

【Go】函数的使用

扶摇_hyber 2024-07-24 阅读 12

【备战秋招】——算法题目训练和总结day1😎


追梦之旅,你我同行

前言🙌

NC313 两个数组的交集

题目链接:两个数组的交集

在这里插入图片描述

我的题解思路分享

  • 首先是认真审题,结合示例理解。
  • 判断共同元素,我首先想到的是哈希思想。能使用数组来代替哈希表就用数组。因为容器的建立和使用都是有成本的,会影响解题效率。
  • 这道题目的数据范围和数据个数都比较小。因此,我们可以用一个数组来代替哈希表。
  • 先遍历其中一个nums1数组,在check中做好标记,check的下标表示的nums1数组的元素,存的值表示该元素在不在。遍历完后,就已在check中标记好了nums1数组各个元素。
  • 然后遍历另外一个nums2数组。当发现该元素在check中已经存在时,便找到了两个数组的共同元素。将该元素添加到ret结果数组里面。特别注意的是需要将该元素在check中的删除它的存在,为什么这样做?因为它没有存在的必要了,而且它的存在,如果nums2数组后面还有相同的这个元素,会造成添加重复的共同元素进入ret中。

看了上述代码如果还是不太理解的小伙伴,可以尝试结合示例多看几遍题目,把握细节,然后再结合我的代码理解理解~。为了方便大家的学习,我的代码都写好注释啦

代码分享

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
    	//判断元素是否存在
        bool check[1001] = {0};
        vector<int> ret;
        //遍历数组,并填充check,表示这些元素都已经存在了
        for(const auto& n : nums1)
        {
            check[n] = true;
        }
        //遍历另外一个数组,如果为true,则找到共同元素
        for(const auto& n : nums2)
        {
            if(check[n] == true)
            {
                ret.push_back(n);
                //去除重复添加共同元素进入ret中(题目细节有说明,共同元素只添加一个就行)
                check[n] = false;
            }
        }
        return ret;
    }
};

AB5 点击消除

题目链接: 点击消除

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

我的题解思路分享

  • 首先是认真审题,结合示例理解。
  • 这到题目和括号匹配时很类似的,解决办法都可以用栈的思路来解决。
  • 首先先遍历s字符串的每一个字符和栈顶元素是否一样,一样就删除栈顶元素,不一样就入栈。但是我们这道题可以不用栈这个数据结构来搞,我们使用string来模拟栈就可以了。
  • 我们需要注意一下,如果最后字符串都消除了,则返回“0”。

代码分享

#include<iostream>
using namespace std;

int main()
{
    string ret = "";
    string s;
    cin >> s;
    for(const auto& c : s)
    {
    	//不相等就入栈
        if(c != ret.back())
        {
            ret.push_back(c);
        }
        else//相等就出栈
        {
            ret.pop_back();
        }
    }
    //判断字符串是否为空
    if(ret.empty())
        cout << "0";
    else 
        cout << ret << endl;
    return 0;
}

总结撒花💞

举报

相关推荐

0 条评论