当前位置: 首页 > news >正文

前后缀分解

 

 

 

 

 

lc3026

hash+动态记录前缀和

class Solution {
public:
    long long maximumSubarraySum(vector<int> &nums, int k) {
        long long ans = LLONG_MIN, sum = 0;
        unordered_map<int, long long> min_s;
        for (int x: nums) {
            auto it = min_s.find(x + k);
            if (it != min_s.end()) {
                ans = max(ans, sum + x - it->second);
            }

            it = min_s.find(x - k);
            if (it != min_s.end()) {
                ans = max(ans, sum + x - it->second);
            }

            it = min_s.find(x);
            if (it == min_s.end() || sum < it->second) {
                min_s[x] = sum;
            }

            sum += x;
        }
        return ans == LLONG_MIN ? 0 : ans;
    }
};

 

lc2588

 class Solution {

public:

    long long beautifulSubarrays(vector<int>& nums) 

    {

        int k=0;

        

        int n=nums.size();

        vector<int> dp(n+1);

        unordered_map<int,int> hash;

 

        hash[0]=1;//dp[i]==k

        long long ret=0;

        

        for(int i=1;i<=n;i++)

        {

            dp[i]=dp[i-1]^nums[i-1];

            

            if(hash[dp[i]])

                ret+=hash[dp[i]];

                

            hash[dp[i]]++;

        }

        return ret;

    }

};

 

 

lc560

前缀和+hash

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        //子数组:连续的
        int n=nums.size();
        vector<int> dp(n+1);
        unordered_map<int,int> count;

        count[0]=1;//dp[i]==k
        int ret=0;
        
        for(int i=1;i<=n;i++)
        {
            dp[i]=dp[i-1]+nums[i-1];
            if(count[dp[i]-k])
                ret+=count[dp[i]-k];
                
            count[dp[i]]++;
        }
        return ret;
    }
};

 

lc3003 前后缀分解

 

解决“执行操作后的最大分割数”问题

处理字符串前缀、统计字符,结合修改一处字符的最优情况

计算出最大分割数量

 

 

class Solution {

public:

    int maxPartitionsAfterOperations(string s, int k) {

        if (k == 26) {

            return 1;

        }

 

        int seg = 1, mask = 0, size = 0;

        auto update = [&](int i) -> void {

            int bit = 1 << (s[i] - 'a');

            if (mask & bit) { // s[i] 已经在当前这一段中,无影响

                return;

            }

            if (++size > k) {

                seg++; // s[i] 在新的一段中

                mask = bit;

                size = 1;

            } else {

                mask |= bit;

            }

        };

 

        int n = s.length();

        vector<pair<int, int>> suf(n + 1);

        for (int i = n - 1; i >= 0; i--) {

            update(i);

            suf[i] = {seg, mask};

        }

 

        int ans = seg; // 不修改任何字母

        seg = 1; mask = 0; size = 0;

        for (int i = 0; i < n; i++) {

            auto [suf_seg, suf_mask] = suf[i + 1];

            int res = seg + suf_seg; // 情况 3

            int union_size = popcount((uint32_t) mask | suf_mask);

            if (union_size < k) {

                res--; // 情况 1

            } else if (union_size < 26 && size == k && popcount((uint32_t) suf_mask) == k) {

                res++; // 情况 2

            }

            ans = max(ans, res);

            update(i);

        }

        return ans;

    }

};

 

http://www.dtcms.com/a/496966.html

相关文章:

  • 物流的网站模板网站建设的宿主选择
  • 百度申请qq号免费注册官网seo推广学院
  • 做网站的需要注册商标吗吉林关键词优化的方法
  • ESP32基础配置
  • 免费素材网站无版权百度导航最新版本下载安装
  • EPLAN2.9 2022安装破解全攻略
  • 网站设计排行榜福州企业网站
  • 公司怎么申请免费做网站学习php网站开发怎么样
  • 西湖区网站建设小说网站开发的实际意义
  • BugKu Web渗透之 login1
  • 鲜花网网站开发的意义网络营销策划总结
  • 中国航空航天国防展收官之日,展出大量程MEMS陀螺仪
  • 网站设计制做报价服装品牌策划方案
  • 时装网站的建设哪个公司的卡网络最好
  • 做企业礼品的网站网络营销网站
  • 网站建设没有预付款网站推广的方法是什么
  • 嵌入式开发学习日志39——stm32之I2C总线物理层与常用术语
  • 小学生课程同步做网站软件南宁网站建设q479185700棒
  • 鹤壁做网站公司电话平台网站建设 厦门
  • 配置USB CDC功能实现通过USB口的串口输入功能
  • 营销型平台网站建设万网站底部添加备案号
  • 济宁公司做网站在线销售网站设计文献
  • 河南焦作有做网站开发的公司吗网站备案取消前置审批
  • mvc4做网站五免费网站怎么做
  • 无法访问此网站是什么原因2345网址大全浏览器
  • 网站域名查询ip电子商务网站建设与管理课后习题
  • 做网站必须购买空间吗?网上书店网站建设毕业设计范文
  • 搜索动图素材的网站石家庄网站建设登录
  • YYModel源码学习
  • wordpress缩略图生成网站怎么做推广和优化