LeetCode: 14

2023-11-17

Count Binary Substrings

"""简单,但是需要判断啥时候计数“清零”
"""
class Solution {
public:
    int countBinarySubstrings(string s) {
        if(s.size()<=1)
            return 0;
        int zero = 0, one = 0, res=0;
        char pre = s[0];
        for(char c:s){
            if(c=='0'){
                if(pre == '1')
                    zero = 1;
                else
                    zero++;
                if(one>=zero)
                    res++;
            }
            if(c=='1'){
                if(pre == '0')
                    one = 1;
                else
                    one++;
                if(zero>=one)
                    res++;
            }       

            pre = c;
        }

        return res;
    }
};
"""简洁
http://www.cnblogs.com/grandyang/p/7716150.html
"""
class Solution {
public:
    int countBinarySubstrings(string s) {
        int res = 0, pre = 0, cur = 1, n = s.size();
        for (int i = 1; i < n; ++i) {
            if (s[i] == s[i - 1]) ++cur;
            else {
                pre = cur;
                cur = 1;
            }
            if (pre >= cur) ++res;
        }
        return res;
    }
};

Degree of an Array

"""仔细分析,一次循环一次过!
"""
class Solution {
public:
    int findShortestSubArray(vector<int>& nums) {
        unordered_map<int,int> m;
        unordered_map<int, pair<int,int>> m2;
        int n = 0, res = 0;
        for(int j=0;j<nums.size();j++){
            int i = nums[j];
            m[i] ++;

            if(n<m[i])
                res = j-m2[i].first+1;
            if(n==m[i])
                res = min(res, j-m2[i].first+1);

            n = max(n, m[i]);
            if(m[i] ==1)
                m2[i] = {j,j};
            else
                m2[i].second = j;
        }
        return res;
    }
};

1-bit and 2-bit Characters

class Solution {
public:
    bool isOneBitCharacter(vector<int>& bits) {
        int i = 0, n = bits.size();
        while(i<n-1){
            i = bits[i]==0? i+1:i+2;
        }
        return i==n-1;
    }
};

Longest Word in Dictionary

class Solution {
public:
    string longestWord(vector<string>& words) {
        string res;
        unordered_set<string> s;
        sort(words.begin(), words.end());
        for(int j=0;j<words.size();j++){
            string i = words[j];
            if(i.size()==1 || s.count(i.substr(0,i.size()-1))){
                res = res.size()<i.size()?i:res;
                s.insert(i);
            }
        }
        return res;
    }
};

Find Pivot Index

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        int s = 0, cur = 0;
        for(int i=0;i<nums.size();i++){
            s += nums[i];
         }

        for(int i=0;i<nums.size();i++){
            if(s-nums[i]==2*cur)
                return i;
            cur += nums[i];
        }
        return -1;
    }
};

Self Dividing Numbers

class Solution {
public:
    bool helper(int n){
        int m = n;
        while(m){
            if(m%10==0 || n%(m%10)!=0)
                return false;
            m/=10;
        }
        return true;
    }

    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> res;
        for(int i=left;i<=right;i++){
            if(helper(i))
                res.push_back(i);
        }
        return res;
    }
};

Flood Fill

"""
 LeetCode -- reference binding to null pointer of type 'value_type'
 https://blog.csdn.net/m0_38088298/article/details/79249044
 另外:  if(val == newColor)
            return image;
            一句避免了A添加B进队列,B又添加A的死循环。
"""
class Solution {
public:
    bool out_of_bound(int m, int n, int i, int j){
        return (i<0 || j<0 || i>=m || j>=n);
    }

    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
        //BFS
        int val = image[sr][sc];
        if(val == newColor)
            return image;
        vector<vector<int>> dirs = {{0,-1},{0,1},{-1,0},{1,0}};
        int m = image.size();
        int n = image[0].size();
        queue<vector<int>> q;
        q.push({sr,sc});
        image[sr][sc] = newColor;
        while(!q.empty()){
            for(vector<int> dir:dirs){
                int i = q.front()[0]+dir[0];
                int j = q.front()[1]+dir[1];
                if(!out_of_bound(m,n,i,j)){
                    if(image[i][j] == val){
                        image[i][j] = newColor;
                        q.push({i,j});
                    }
                }
            }
            q.pop();
        }
        return image;
    }
};

Find Smallest Letter Greater Than Target

class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        for(char c: letters){
            if(c>target)
                return c;
        }
        return letters[0];
    }
};

Largest Number At Least Twice of Others

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        int first = 0;
        int second = 0;
        int p = 0;
        for(int i=0;i<nums.size();i++){
            int n = nums[i];
            if(n>first){
                second = first;
                first = n;
                p = i;
            }
            else if(n>second)
                second = n;
        }
        return first>=2*second?p:-1;
    }
};

Prime Number of Set Bits in Binary Representation

class Solution {
public:
    int countPrimeSetBits(int L, int R) {
        int res = 0;
        for(int j=L;j<=R;j++){
            int i = j;
            int cur = 0;
            while(i){
                cur += i&1;
                i>>=1;
            }
            if(cur%2!=0 && cur%3!=0 && cur>1)
                res++;
            if(cur==2||cur==3)
                res++;
        }
        return res;
    }
};
"""简短--
"""
class Solution {
public:
    int countPrimeSetBits(int L, int R) {
        int res = 0;
        for (int i = L; i <= R; ++i) {
            int cnt = __builtin_popcount(i);
            res += cnt < 4 ? cnt > 1 : (cnt % 2 && cnt % 3);
        }
        return res;
    }
};

Minimum Distance Between BST Nodes

class Solution {
public:
    void helper(TreeNode* node, int& res, int& pre){
        if(!node)
            return;
        helper(node->left, res, pre);

        if(pre!=-1)
            res = min(res, node->val-pre);
        pre = node->val;

        helper(node->right, res, pre);    
    }
    int minDiffInBST(TreeNode* root) {
        int res = INT_MAX;
        int pre = -1;
        helper(root, res, pre);
        return res;
    }
};

Letter Case Permutation

class Solution {
public:
    void helper(string S, vector<string>& res, int i){
        if(i==S.size()){
            res.push_back(S);
            return;
        }
        helper(S,res,i+1);            
        if(isalpha(S[i])){
            S[i]=isupper(S[i]) ? tolower(S[i]) : toupper(S[i]);
            helper(S,res,i+1);            
        }
    }
    vector<string> letterCasePermutation(string S) {
        vector<string> res;
        helper(S, res, 0);
        return res;
    }
};

Rotate String

class Solution {
public:
    bool rotateString(string A, string B) {
        if(A.size()!=B.size())
            return false;
        if(A=="" && B=="")
            return true;
        for(int i=0;i<A.size();i++){
            int k = 0;
            for(int j=i;j<A.size()+i;j++){
                if(A[j%A.size()] != B[(k++)%A.size()])
                    break;
                if(k==A.size()-1)
                    return true;
            }
        }
        return false;
    }
};

Unique Morse Code Words

"""这里用了set。
"""
class Solution {
public:
    int uniqueMorseRepresentations(vector<string>& words) {
        vector<string> mos={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}; 

        unordered_set <string> encodes;
        for(string word:words){
            string encode = "";
            for(char c:word){
                encode+=mos[c-'a'];
            }
            encodes.insert(encode);
        }
        return encodes.size();
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode: 14 的相关文章

  • 以OpenGL/ES视角介绍gfx-hal(Vulkan) Shader/Program接口使用

    文档列表见 Rust 移动端跨平台复杂图形渲染项目开发系列总结 目录 背景 The right way to tackle this in Vulkan is to use resource descriptors A descriptor
  • 01背包问题变种:从长度为n的数组里选出m个数使和为固定值sum

    这个问题是我从leetcode上一道问题所想到的 原题 如果是从数组中选出2个数相加使之成为固定的数sum 这当然很简单 把数组中的数字遍历一遍 判断另一个数字是否也在数组中即可 代码如下 vector
  • python 历险记(五)— python 中的模块

    目录 前言 基础 模块化程序设计 模块化有哪些好处 什么是 python 中的模块 引入模块有几种方式 模块的查找顺序 模块中包含执行语句的情况 用 dir 函数来窥探模块 python 的内置模块有哪些 结语 参考文档 系列文章列表 前言
  • 算法--将数组分成和相等的多个子数组,求子数组的最大个数

    作者 陈太汉 一个整数数组 长度为n 将其分为m份 使各份的和相等 求m的最大值 比如 3 2 4 3 6 可以分成 3 2 4 3 6 m 1 3 6 2 4 3 m 2 3 3 2 4 6 m 3 所以m的最大值为3 算法 原理的思想是
  • 直线检测方法—LSD论文翻译

    附原文链接 LSD a Line Segment Detector 摘 要 LSD是一个线段检测器 能够在线性时间内得到亚像素级精度的检测结果 它无需调试参数就可以适用于任何数字图像上 并且能够自我控制错误数量的检测 平均来说 一个图像中允
  • SDUT--OJ《数据结构与算法》实践能力专题训练6 图论

    A 数据结构实验之图论一 基于邻接矩阵的广度优先搜索遍历 Description 给定一个无向连通图 顶点编号从0到n 1 用广度优先搜索 BFS 遍历 输出从某个顶点出发的遍历序列 同一个结点的同层邻接点 节点编号小的优先遍历 Input
  • Python 实现列队

    1 列队定义 队列是项的有序结合 其中添加新项的一端称为队尾 移除项的一端称为队首 当一个元素从队尾进入队列时 一直向队首移动 直到它成为下一个需要移除的元素为止 最近添加的元素必须在队尾等待 集合中存活时间最长的元素在队首 这种排序成为
  • 数据结构与算法书籍推荐

    学习数据结构与算法 还是很有必要看几本相关的书籍 但根据不同基础的人 合适看的书也不一样 因此 针对不同层次 不同语言的人 推荐几本市面上口碑不错的书 1 入门级 针对刚入门的同学 建议不要急着去看那些经典书 像 算法导论 算法 这些比较经
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • Unique Binary Search Trees -- LeetCode

    原题链接 http oj leetcode com problems unique binary search trees 这道题要求可行的二叉查找树的数量 其实二叉查找树可以任意取根 只要满足中序遍历有序的要求就可以 从处理子问题的角度来
  • 堆栈01--用两个栈实现队列

    堆栈01 用两个栈实现队列 jz05 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 测试用例 队列先进先出 输入 1 2 输出 1 2 解析
  • 算法问题实战策略

    算法问题实战策略 基本信息作者 韩 具宗万 译者 崔盛一出版社 人民邮电出版社ISBN 9787115384621上架时间 2015 2 4出版日期 2015 年3月开本 16开页码 738版次 1 1 内容简介 算法问题实战策略 本书收录
  • CRC校验(二)

    CRC校验 二 参考 https blog csdn net liyuanbhu article details 7882789 https www cnblogs com esestt archive 2007 08 09 848856
  • 用指针访问一维数组

    文章目录 顺序查找 数组方式实现 指针实现方式 对一位数组元素的访问有三种方式 指针变量的关系运算 引例 数组实现方式 主函数 指针实现方式 主函数 一维数组作为函数的参数 实际应用 顺序查找 要求用指针实现 在整数集合r中顺序查找与给定值
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • 机器学习算法GBDT的面试要点总结-上篇

    1 简介 gbdt全称梯度提升决策树 在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一 在前几年深度学习还没有大行其道之前 gbdt在各种竞赛是大放异彩 原因大概有几个 一是效果确实挺不错 二是即可以用于分类也可以用于回归 三是可
  • 插入排序超详解释,一看就懂

    目录 一 插入排序的相关概念 1 基本思想 2 基本操作 有序插入 二 插入排序的种类 三 直接插入排序 1 直接插入排序的过程 顺序查找法查找插入位置 2 使用 哨兵 直接插入排序 四 直接插入排序算法描述 五 折半插入排序 1 查找插入
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子
  • 从源码角度来谈谈 HashMap

    HashMap的知识点可以说在面试中经常被问到 是Java中比较常见的一种数据结构 所以这一篇就通过源码来深入理解下HashMap 1 HashMap的底层是如何实现的 基于JDK8 1 1 HashMap的类结构和成员 HashMap继承

随机推荐

  • cuBLAS【CUDA专门用来解决线性代数运算的库】

    cuBLAS是CUDA专门用来解决线性代数运算的库 分为三个级别 Lev1向量乘向量 Lev2矩阵乘向量 Lev3矩阵乘矩阵 此外 cuBLAS库还包含一些功能和状态结构函数 学习网站为 参考资料 四 cuBLAS与cuDNN
  • mysql 快照和binlog_mysql binlog二进制日志详解

    mysql binlog二进制日志详解 更新时间 2011年10月31日 23 13 00 作者 二进制日志包含了所有更新了数据或者已经潜在更新了数据 例如 没有匹配任何行的一个DELETE 的所有语句 基本概念 定义 二进制日志包含了所有
  • Tcl脚本学习

    包的创建和调用 在tcl脚本中 我们可以通过创建和调用包来增强代码的可复用性 创建包的步骤 1 在包脚本文件中 首先声明 package provide 标识当前文件提供了一个包 之后在该文件中完成包的内容 2 通过pkg mkIndex命
  • element table 表格实现上移、下移

    业务场景 有时候需要前端实现上移和下移功能 代码如下 根据交互形式 我这里是把第一条数据的上移按钮置灰不可点击 disabled scope index 0 最后一条数据下移按钮置灰不可点击 disabled scope index 1 t
  • DCDC输入输出电容的选择和计算(转载)

    文章转自MPS论坛 https forum monolithicpower cn t topic 2105 目前市面上的电容种类繁多 在为我们的电源电路选择输入输出电容的时候难免会挑花了眼 本文就来浅析一下如何选择输入输出电容及其相关的计算
  • 企业运维经典面试题汇总(5)

    1 git和svn 的区别 Git是分布式的 而Svn不是分布的 Git把内容按元数据方式存储 而SVN是按文件 Git没有一个全局版本号 而SVN有 目前为止这是跟SVN相比Git缺少的最大的一个特征 Git的内容的完整性要优于SVN G
  • Qt-窗口嵌套exe

    某些特殊场景 我们要在主程序中嵌套第三方程序 这样臃肿的设计好比 在乡村小楼里面建设一个商业广场 本人不是很喜欢 Qt的QProcess和QWindow可以为我们完成这样的任务 核心思路即 QProcess启动第三方exe 获取进程ID w
  • 各种窗体操作的bug解决

    1 java lang IllegalArgumentException View com android internal policy impl PhoneWindow DecorView 41e0f220 V E R D 0 0 53
  • TensorFlow 2.0 安装指南

    TensorFlow 2 0 beta1 已经发布 本文详细介绍在个人电脑或服务器上安装 TensorFlow 2 0 beta1 的步骤和各种细节 让你第一次安装 TensorFlow 2 0 就上手 一般安装步骤 TensorFlow
  • RangeError: Maximum call stack size exceeded

    问题现场 执行环境 安卓设备 V8 引擎 Java 代码中调用 JavaScript 报错日志 2021 10 21 14 52 53 156 30457 30457 com fuck you E com fuck you JavaInvo
  • ‘vite’ 不是内部或外部命令,也不是可运行的程序或批处理文件问题解决

    问题解析 使用vite创建vue3 0项目的时候 vite不会自动 install 相关的依赖 需要我们手动去安装 进入项目的node modules目录里面查看 什么都没有 所以说出现这个问题的原因是 缺少安装依赖这一步 vite不像 n
  • 卷积神经网络之计算机视觉应用(一)

    卷积神经网络之计算机视觉应用 一 一 引言 21世纪开始 卷积神经网络就被成功的大量用于检测 分割 物体识别以及图像的各个领域 值得一提的是 图像可以在像素级别进行打标签 这样就可以应用在比如自动电话接听机器人 自动驾驶汽车等技术中 尽管卷
  • 宝元系统u盘使用说明_联想小新Air14使用U盘重装win7系统图解

    联想小新Air14是一款适合年轻人使用的笔记本 高大上的颜值符合现在阶段的年轻用户的审美要求 拥有很高的屏占比 还配置了一个酷酷的按压式指纹识别功能 得到了很多用户的喜爱 开机速度超快 运行流畅 能让用户感受不一样的使用体验 这款笔记本预装
  • element-ui 下拉菜单 el-dropdown-menu 组件 不能动态渲染数据怎么解决?

    关于element ui 下拉菜单 el dropdown menu 组件 不能动态渲染 数据怎么解决 element ui 官网中的例子是这样写的
  • State(状态模式)行为型

    状态模式 一 概述 二 结构 三 实例 四 适用场景 五 优缺点 一 概述 描述 一天有早中晚 不同时间下 太阳光是不一样的 所以随着早中晚的状态变化 太阳的行为也随着变化 定义 状态模式是一种行为设计模式 让你能在一个对象的内部状态变化时
  • Vs2013打开项目时,一直处理等待状态,并显示“Microsoft Visual Studio正忙”的提示窗,处理方法

    问题 现象 VS2013打开项目时 一直处理等待状态 并显示 Microsoft Visual Studio正忙 的提示窗 如下图 此时只能在window任务管理器关闭其进程devenv exe 但再将Vs打开 新建项目 又是好的 只是运行
  • buck电路_BUCK电路工作原理与常用词汇介绍

    首先总结用的最多的电源 1 软启动 AP3502E的PIN8为SS 意思就是soft start 软启动 那么什么是软启动呢 软启动就是使得输出电压慢慢上升到固定值 目的很简单就是为了降低上电瞬间各器件的应力 图片如下 通常的设计在SS脚处
  • kafka如何避免消费组重平衡

    目录 前言 协调者 重平衡的影响 避免重平衡 重平衡发生的场景 参考资料 前言 Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程 在 Rebalance
  • iMX8MM启动流程

    iMX8MM启动流程 1 Boot ROM 2 IVT和DCD 3 启动流程 4 总结 我移植的板子是讯为i MX8MM开发板 参考板为官方 8MMINILPD4 EVK开发板 iMX8MM uboot2021 04 linux5 15 3
  • LeetCode: 14

    Count Binary Substrings 简单 但是需要判断啥时候计数 清零 class Solution public int countBinarySubstrings string s if s size lt 1 return