分享秋招面试题

这篇具有很好参考价值的文章主要介绍了分享秋招面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天分享的是两道秋招面试题(来自于求职同学收集)

两道出自于国内两大刷题网站牛客网和leetcode

第一道题 (最小覆盖子串)

题目表述

给出两个字符串 s 和 t,要求在 s 中找出最短的包含 t 中所有字符的连续子串。

数据范围:0≤ ∣S∣≤100000,∣T∣≤10000,保证s和t字符串中仅包含大小写英文字母

要求:进阶:空间复杂度 O(n) , 时间复杂度 O(n)

例如:

S="XDOYEZODEYXNZ"
T="XYZ"
找出的最短子串为"YXNZ".

注意:
如果 s 中没有包含 t 中所有字符的子串,返回空字符串 “”;
满足条件的子串可能有很多,但是题目保证满足条件的最短的子串唯一。

示例

输入:

"XDOYEZODEYXNZ","XYZ"

返回值:

"YXNZ"
输入:
"abcAbA","AA"

复制返回值:
"AbA"

 解体思路

要求s字串都包含t,并且要求s字串长度最小,我们可以想到使用双指针+哈希来写,双指针控制在left---right的区间中,哈希map可以直接判断left---right的各字符个数于t中比较。如果各字符的个数都大于等于t中各字符,将left++,进而缩短字串的长度,如果left---right的各字符个数于t中比较出现少于t中各字符,说明不能满足于题目条件,需要right++扩大字串长度。

每次满足题目中的条件(t的各个字符个数都小于等于s字串)记录取最小值。

代码展示

#include <unordered_map>
class Solution {
public:
    
    string minWindow(string S, string T) {
        string s=S;
        string t=T;
        unordered_map<char, int>mp1;
        unordered_map<char, int>mp2;
        vector<pair<int,int>>res;
        for(int i=0;i<T.size();i++)
        {
            mp1[t[i]]++;
        }
        int left=0;
        int right=0;
        mp2[s[0]]++;
        while(right<s.size())
        {
            bool flag=false;  
            for(int i=0;i<t.size();i++)  //对t中各字符数量比较
            {
                char ch=t[i];
                if(mp1[ch]>mp2[ch])
                {
                    flag=true;
                    break;
                }
            }
            if(flag==true)
            {
                right++;
                mp2[s[right]]++;
            }
            else {
                mp2[s[left]]--;
                res.push_back({left,right});
                left++;
            }
        }
        int index=s.size();
        for(int i=0;i<res.size();i++)
        {
            int l=res[i].second-res[i].first+1;
            index=min(index,l);
        }
        string st;
        for(int i=0;i<res.size();i++)
        {
            int l=res[i].second-res[i].first+1;
            if(l==index)
            {
                st=s.substr(res[i].first,l);
            }
        }
        return st;
    }
};

第二道题 (和可被k整除的子数组)

题目表述

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。

子数组 是数组的 连续 部分。

  • 1 <= nums.length <= 3 * 10000
  • -104 <= nums[i] <= 10000
  • 2 <= k <= 10000

示例

输入:nums = [4,5,0,-2,-3,1], k = 5
输出:7
解释:有 7 个子数组满足其元素之和可被 k = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

输入: nums = [5], k = 9
输出: 0

解题思路

首先我得先提醒一下,这里的题目表示不是很清楚,可被K整除就是可以把K整除,编程表达就是 x%k=0 

题意就是求出来有多少段子数组的和对k求余为0,几乎很快就可以想到一个O(N*N)的方法,但是超出时间限制,我们可以想到通过前缀和来算出每个子数组的和,时间复杂度为O(N),定义arr为前缀和数组  arr[right]-arr[left]就是left---right的和;要求(arr[right]-arr[left])%k==0,也可以表示为arr[right]%k==arr[left]%k。所以对于每个arr(前缀和数组)来说,对k求余后结果一样就说明两个边界的区间之和能把k整除。

如果余数1的个数为1,则将k整除个数为0

如果余数1的个数为2,则将k整除个数为1

如果余数1的个数为3,则将k整除个数为3

我们可以通过将每次哈希保存每个余数对应的个数。

代码展示

class Solution {
public:
    int subarraysDivByK(vector<int>& nums, int k) {
        unordered_map<int,int>mp;
        long long ans=0;
        mp[0]=1;
        int arr[nums.size()];
        arr[0]=nums[0];
        for(int i=1;i<nums.size();i++)
        {
            arr[i]=arr[i-1]+nums[i];
        }
        for(int i=0;i<nums.size();i++)
        {
            int x=(arr[i])%k;
            x=(x+k)%k;
            ans+=mp[x];
            mp[x]++;
        }
        return ans;
    }
};

ps:如果余数为0时:

个数为1,则将k整除个数为1

个数为2,则将k整除个数为3

So将mp[0]赋值为1

 ⭐学术交流群Q 754410389   持续更新中~~~文章来源地址https://www.toymoban.com/news/detail-601707.html

到了这里,关于分享秋招面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 200个经典面试题(算法思想+数据结构)_1

    1. 爬楼梯 70. Climbing Stairs (Easy) 题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。 定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。 第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步

    2024年02月13日
    浏览(42)
  • 【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表

    一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习 题目 解题思路 时间 空间 两数之和 辅助哈希 使用map存储出现过的值,key为值大小,v

    2024年02月22日
    浏览(55)
  • 【Java数据结构 -- 队列:队列有关面试oj算法题】

    只允许在一端进行插入数据操作,在另一端进行删除数据操作得特殊线性表,队列是 先进先出 ,入队:进行插入操作得一端称为 队尾(rear) ,出队:进行删除操作的一端称为 队头(front) 。队列Queue是个接口, 底层通过链表实现的 。 boolean offer(E e) – 入队列 E poll() – 出队

    2024年01月25日
    浏览(45)
  • 解密算法与数据结构面试:程序员如何应对挑战

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月11日
    浏览(49)
  • 【Python数据结构与算法】——(线性结构)精选好题分享,不挂科必看系列

    🌈个人主页:  Aileen_0v0 🔥系列专栏:Python数据结构与算法专栏 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 1.time complexity of algorithm A is O(n^3) while algorithm B is O(2^n). Which of the following statement is TRUE?  A.For any problem in any scale, the alogorithm A is more efficient than alogrithm B. B.For any problem

    2024年02月05日
    浏览(44)
  • 数据结构(五):哈希表及面试常考的算法

    哈希表,也叫散列表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。例如,下列键(key)为人名,value为性别。 数组 map(映射) 映射 底层实现 是否有序 数值是否可以重复 能否更改数

    2024年02月05日
    浏览(48)
  • 【地铁上的面试题】--基础部分--数据结构与算法--动态规划和贪心算法

    一、动态规划的基本概念和思想 1.1 动态规划的定义和特点 动态规划是一种解决多阶段决策问题的算法思想,它通过将问题划分为若干个子问题,并保存子问题的解来求解原问题的方法。动态规划的特点包括以下几个方面: 最优子结构性质:动态规划问题具有最优子结构,即

    2024年02月12日
    浏览(55)
  • 字节跳动音视频面试一面挂!!,狂刷200道数据结构与算法

    线程执行结束,我们怎么知道他结束了,其实是ipc的问题… tcp和http区别 然后让我手算255.255.250.0子网掩码的IP可以有多少个,应该是8+2,所以是2的10次方个 刚开始记错了,32/4是8,记成了6,面试官一直问我确认吗,还好后来反应过来了… ndk了解吗 音视频为什么编码,常见的

    2024年04月28日
    浏览(49)
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量

    循环不变量 之前我们讲的线性查找法的核心代码如下: 我们是否有思考过,这样一个简单的查找算法,用到了循环,但是每一轮循环开始前,需要满足的条件是什么? 其实,循环开始时,需要确认: 确认data[i]是否是目标 通过语句,if (data[i].equals(target))判断 循环体执行完一

    2023年04月18日
    浏览(46)
  • 分享秋招面试题

    今天分享的是两道秋招面试题(来自于求职同学收集) 两道出自于国内两大刷题网站牛客网和leetcode 题目表述 给出两个字符串 s 和 t,要求在 s 中找出最短的包含 t 中所有字符的连续子串。 数据范围:0≤ ∣S∣≤100000,∣T∣≤10000,保证s和t字符串中仅包含大小写英文字母 要

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包