ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Amazon Max deviation among all substrings

2022-04-27 16:03:13  阅读:7383  来源: 互联网

标签:deviation arr int Max sum Amazon ans max


很值得思考的一个问题.

引用自: https://leetcode.com/discuss/interview-question/1742621/Amazon-or-OA-or-Max-deviation-among-all-substrings

Let's have a string: abbbcacbcdce

 For substring abbb, you have most frequent letter b -> 3 and least frequent letter a -> 1.

So the deviation is = most frequent - least frequent = 3 - 1 = 2. You need to look at all the substrings and find the max deviation.

 Here substring cacbcdc has the max deviation.

Frequency is like below:
c -> 4, a ->1, b->1, d->1.
So max freq - min freq = 4 - 1 = 3.

Among all substrings deviation, this is the max. So need to return it. 

String length is 10^4. So you can't check each substring.

 

#include<bits/stdc++.h>
using namespace std;

int modifiedKadane( vector<int> &arr , int k ){
    if( arr.size() < k )
        return 0;
    
    int n = arr.size();
    vector<int> maxSum(n);

    // use kadane's
    maxSum[0] = arr[0];
    for (int i = 1 ; i < arr.size(); i++) {
      maxSum[i] = max(arr[i], maxSum[i - 1] + arr[i]);
    }

    int sum = 0 ;
    for (int i = 0 ; i < k; i++) {
      sum += arr[i];
    }

    int ans = sum;
    for (int i = k ; i < arr.size(); i++) {
      sum = sum + arr[i] - arr[i - k];
      ans = max(ans, sum);
      ans = max(ans, sum + maxSum[i - k]);
    }

    return ans;
}

int maxDeviation( string str ){
    int ans = 0 ;

    for( char c1 = 'a' ; c1<='z' ; c1++ ){
        for( char c2 = 'a' ; c2<='z' ; c2++ ){
            if ( c1 == c2 )
                continue;

            vector<int> arr;
            // we consider c1 as character with maxFreq and c2 with minFreq
            for( auto c : str ){
                if( c==c1 ){
                    // We shall include all consecutive c1's in our array so we add their frequency
                    if( arr.size() && arr.back() != -1 ){
                        arr.back() += 1;
                    }
                    else{
                        arr.push_back( 1 );
                    }
                }
                else if( c==c2 ){
                    // we take distinct c2
                    arr.push_back( -1 );
                }
            }
            ans= max( ans , modifiedKadane(arr, 2) );
        }
    }
    return ans;
}
int main(){
    // string str = "abacccabab";
    string str = "baaa";
    
    cout<<maxDeviation(str)<<"\n";
    return 0;
}

  

标签:deviation,arr,int,Max,sum,Amazon,ans,max
来源: https://www.cnblogs.com/micoblog/p/16199296.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有