我是靠谱客的博主 文艺皮皮虾,最近开发中收集的这篇文章主要介绍LeetCode 前缀和+哈希表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、LeetCode 525 连续数组
题目描述:
给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。

思路:
首先把数组中是0的数,转换为-1
然后利用前缀和哈希表

代码如下:

class Solution {
public:
    int findMaxLength(vector<int>& nums) {
        int res=0;
        int sum=0;
        unordered_map<int,int>mp;
        for(int& num:nums){
            if(num==0){
                num=-1;
            }
        }
        for(int i=0;i<nums.size();i++){
            sum+=nums[i];
            if(sum==0&&i>res){
                res=i+1;
            }
            if(mp.count(sum)){
                res=max(res,i-mp[sum]);
            }
            else{
                mp[sum]=i;
            }
        }
        return res;
    }
};

二、LeetCode 面试题17.05 字母与数字
题目描述:
给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。

返回该子数组,若存在多个最长子数组,返回左端点最小的。若不存在这样的数组,返回一个空数组。

思路:
把数字变成-1
把字母变成1
然后同上一题连续数组的写法

代码如下:

class Solution {
public:
    vector<string> findLongestSubarray(vector<string>& array) {
        int n=array.size();
        vector<int>nums(n);//数字是-1,字母是1
        for(int i=0;i<n;i++){
            if(array[i][0]>='0'&&array[i][0]<='9'){
                nums[i]=-1;
            }
            else{
                nums[i]=1;
            }
        }
        int left=0,right=0;
        int res=0,sum=0;
        unordered_map<int,int>mp;
        for(int i=0;i<n;i++){
            sum+=nums[i];
            if(sum==0&&i>res){
                res=i+1;
                left=0;
                right=i;
            }
            if(mp.count(sum)){
                if(res<i-mp[sum]){
                    res=i-mp[sum];
                    left=mp[sum]+1;
                    right=i;
                }
            }
            else{
                mp[sum]=i;
            }
        }
        vector<string>ans;
        if(right<=left) return ans;
        for(int i=left;i<=right;i++){
            ans.push_back(array[i]);
        }
        return ans;
    }
};

最后

以上就是文艺皮皮虾为你收集整理的LeetCode 前缀和+哈希表的全部内容,希望文章能够帮你解决LeetCode 前缀和+哈希表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部