力扣面试题 17.05. 字母与数字

这一道题和
力扣525.连续数组

思路一模一样。

都是把其中一种看作-1,另一种看作1,这样转化为找前缀和为0的子数组,比较简单,哈希表+前缀和解决

c++class 复制代码
public:
  int sum[100005];
unordered_map<int,int> mp;
vector<string> findLongestSubarray(vector<string>& array) {
        for(int i=0;i<array.size();i++)
        {
        	if(array[i][0]>='0'&&array[i][0]<='9')
        	{
        		sum[i+1]=sum[i]-1;
			}
			else
			{
				sum[i+1]=sum[i]+1;
			}
        
		}
		mp[0]=0;
		int l=0;
		int r=0;
		int llmax=0;
		int rrmax=0;
		int maxx=0;
		for(int j=1;j<=array.size();j++)
		{
			if(mp.count(sum[j]))
			{
				r=j;
				l=mp[sum[j]];
				if(r-l>maxx)
				{
					maxx=r-l;
					llmax=l;
					rrmax=r;
				}
			}
			else
			{
				mp[sum[j]]=j;
			}
		}
      
        return vector<string>(array.begin()+llmax,array.begin()+rrmax);
        
        
        
    }
};

但这一道题要注意的是返回值,如上代码写,比较方便,应该掌握

时间复杂度O(n)

相关推荐
binnnngo35 分钟前
Minmax 算法与 Alpha-Beta 剪枝小教学
算法·机器学习·剪枝
এ᭄画画的北北2 小时前
力扣-287.寻找重复数
算法·leetcode
黑听人8 小时前
【力扣 困难 C】329. 矩阵中的最长递增路径
c语言·leetcode
YuTaoShao9 小时前
【LeetCode 热题 100】141. 环形链表——快慢指针
java·算法·leetcode·链表
小小小新人1212310 小时前
C语言 ATM (4)
c语言·开发语言·算法
你的冰西瓜11 小时前
C++排序算法全解析(加强版)
c++·算法·排序算法
এ᭄画画的北北11 小时前
力扣-31.下一个排列
算法·leetcode
绝无仅有12 小时前
企微审批对接错误与解决方案
后端·算法·架构
用户50408278583913 小时前
1. RAG 权威指南:从本地实现到生产级优化的全面实践
算法