31.哀家要长脑子了!

news/2024/6/14 11:48:06 标签: leetcode, 算法, 数据结构

不行啊 这个不能停啊

1.451. 根据字符出现频率排序 - 力扣(LeetCode)

哎哟,每次朦朦胧胧似懂非懂的,一看到感觉就是用无序map,但是让我上手我又不知道怎么写了,烦死了!

说一下:用一个unordered_map统计每个字符出现的次数,因为它是unordered的,所以它是不支持按key或者按value排序的,把它再放进一个数组可以用sort函数按字符的出现次数排序呀,最后遍历这个数组,看字符出现次数出现了几次,构造字符串的时候,相应字符也要出现几次。

class Solution {
public:
    string frequencySort(string s) {
        unordered_map<char, int>map;
        for(char ch : s){
            map[ch]++;
        }
        vector<pair<char,int>> vec;
        for(auto &it : map){
            vec.emplace_back(it);
        }
        sort(vec.begin(), vec.end(), [](const pair<char, int> &a, const pair<char, int> &b)                        
            {    return a.second > b.second; 
             });
        string res;
        for(auto &[ch, num] : vec){
            for(int i = 0; i < num; i++){
                res += ch;
            }
        } 
        return res;
    }
};

for(auto &[ch, num] : vec)

这这这是一个foreach语句,在这里,[ch, num]就是结构化绑定的部分,它告诉编译器从迭代的元素中解构出两个部分,并分别绑定到str和num这两个变量上

 sort(vec.begin(), vec.end(), [](const pair<char, int> &a, const pair<char, int> &b){       
        return a.second > b.second; 
       });

这这这是一个lambda表达式,我说第三个。

Lambda表达式语法定义

[capture list] (parameters) mutable throw() -> return type { statement }

  捕获列表       参数列表   可变规格异常说明    返回类型       函数体        

  1. 捕获列表:在C++规范中也称为Lambda导入器,捕获列表总是初夏在Lambda函数的开始处。实际上,[ ]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用。换句话说,Lambda表达式常常会被用在一个函数里,但它只能访问外部的全局变量而并不能访问函数里的局部变量列表,只要被列在了列表内,那么表达式都可以对其进行访问。
    捕获变量的方式有三种:    
            • 按值捕获(capture by value)   
            • 按引用捕获(capture by reference)   
            • 按值捕获(implict capture)                
2.696. 计数二进制子串 - 力扣(LeetCode) 

巧妙太巧妙了

把每一部分连续的0或连续的1的长度记录下来,长度比较 小的那一个就是对于这部分的0、1来说可以满足题目条件的子串的出现次数

class Solution {
public:
    int countBinarySubstrings(string s) {
        vector<int> counts(26);
        int i = 0, len = s.size();
        while(i < len){
            char ch = s[i];
            int count = 0;
            while(i < len && ch == s[i]){
                i++, count++;
            }
            counts.push_back(count);
        }
        int res = 0;
        for(int i = 1; i < counts.size(); i++){
            res += min(counts[i], counts[i-1]);
        } 
        return res;
    }
};

我真的觉得6

3.467. 环绕字符串中唯一的子字符串 - 力扣(LeetCode) 

求不同非空子串在base中出现的个数,其实就是求最长的连续子串捏,就是说,每个以某字母结尾的最长连续子串能贡献的唯一子串数量恰好就是它的长度,因为连续子串中的每一个前缀都是一个有效子串(参考示例3)

所以在这里,维护一个数组dp,其中dp[i]表示以字母表中第i个字母结尾的最长连续子串的长度

class Solution {
public:
    int findSubstringInWraproundString(string s) {
        // 用一个dp数组 里面放着以当前字母为结尾的最长连续子串
        vector<int> dp(26);
        int k  = 0;
        for(int i = 0; i < s.size(); i++){
        // 看看这两个字母之间是不是连续的 
        // +26的原因是a-z会是-1 这样+26取模也会是1
        // %可以类比循环队列操作
            if(i && (s[i] - s[i-1] + 26) % 26 == 1){
                k++;
            }
            else{
                k = 1;
            }
            // 当当前记录的连续子串的长度大于之前记录的长度 此时才会更新 重新记录
            dp[s[i] - 'a'] = max(dp[s[i] - 'a'], k);
        }
            return accumulate(dp.begin(), dp.end(), 0);
    }
};

其实我有点懵懵懂懂的,我只能写个注释了。。。


http://www.niftyadmin.cn/n/5514291.html

相关文章

体验SmartEDA:颠覆传统,设计流程更流畅,超越Multisim与Proteus!

在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;传统软件如Multisim和Proteus一直是工程师们的得力助手。然而&#xff0c;随着科技的飞速发展和用户需求的不断升级&#xff0c;一个全新的EDA平台——SmartEDA正崭露头角&#xff0c;凭借其更为流畅的设计流程&am…

全方位·多层次·智能化,漫途水库大坝安全监测方案

党的十九届五中全会提出&#xff0c;到2025年前&#xff0c;完成新出现病险水库的除险加固&#xff0c;配套完善重点小型水库雨水情和安全监测设施&#xff0c;实现水库安全鉴定和除险加固常态化。 加快推进小型水库除险加固。加快构建气象卫星和测雨雷达、雨量站、水文站组成…

中微子代理实现内网穿透

前言 中微子代理 一个基于Netty的开源内网穿透神器&#xff0c;帮助我们实现本地服务代理 中微子代理官网 一、什么是内网穿透&#xff1f; 内网穿透是一种网络技术&#xff0c;允许用户通过公共网络访问内部网络资源&#xff0c;绕过了内部网络的安全限制。 通俗一点说就…

CPython源码学习5:字节对象

字节的结构体 PyBytesObject 浮点数的结构体 PyBytesObject &#xff0c;定义在头文件 Include/bytesobject.h 中&#xff0c;包含PyObject_VAR_HEAD 说明字节是可变大小的对象。 // Include/bytesobject.h typedef struct {PyObject_VAR_HEAD // 可变大小的对象Py_hash_t ob…

【代码随想录】【算法训练营】【第35天】 [1005]K次取反后最大化的数组和 [134]加油站 [135]分发糖果

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 35&#xff0c;连休两天~ 题目详情 [1005] K次取反后最大化的数组和 题目描述 1005 K次取反后最大化的数组和 解题思路 前提&#xff1a;数组 思路&#xff1a;优先负数取反&#xff0c;未…

C# —— 显示转换

显示转换: 通过一些方法可以将其他数据类型转换为我们想要的数据类型 1.括号强转 作用: 一般情况下 将高精度的类型转换为低精度 // 语法: 变量类型 变量名 (转换的变量类型名称) 变量; // 注意: 精度问题 范围问题 sbyte sb 1; short s 1; int …

Day48 代码随想录打卡|二叉树篇---合并二叉树

题目&#xff08;leecode T617&#xff09;&#xff1a; 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新…

【管理咨询宝藏124】通过BLM打通前端业务与财务的双轨制设计方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏124】通过BLM打通前端业务与财务的双轨制设计方案 【格式】PDF版本 【关键词】BLM、组织架构设计、流程优化 【核心观点】 - 运用“拉通业务财务…