• wy的leetcode刷题记录_Day56


    wy的leetcode刷题记录_Day55

    声明

    本文章的所有题目信息都来源于leetcode
    如有侵权请联系我删掉!
    时间:2022-11-29

    前言

    1758. 生成交替二进制字符串的最少操作数

    今天的每日一题是:1758. 生成交替二进制字符串的最少操作数
    超链接

    题目介绍

    给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。

    交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。

    返回使 s 变成 交替字符串 所需的 最少 操作数。

    示例 1:
    输入:s = “0100”
    输出:1
    解释:如果将最后一个字符变为 ‘1’ ,s 就变成 “0101” ,即符合交替字符串定义

    示例 2:
    输入:s = “10”
    输出:0
    解释:s 已经是交替字符串。

    思路

    很简单的一道模拟题:根据题意我们知道字符串只包含’0’和’1’,并且相邻的字符串只有俩种情况,1开头:10101010…和0开头010101…,其中0和1的个数相加就是字符串中字符的个数,于是我们只需要统计其中一种排列方式的组合。比如1开头的,我们统计符合101010样式的字符个数n,另外一种的个数就是互补的,即字符串的个数-n,然后取其中的最小值即可。

    代码

    class Solution {
    public:
        int minOperations(string s) {
            int count=0;
            int n=s.size();
            for(int i=0;i<n;i=i+2)
            {
                if(s[i]!='1')
                    count++;
            }
            for(int i=1;i<n;i=i+2)
            {
                if(s[i]!='0')
                    count++;
            }
            return min(count,n-count);
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    收获

    简单的模拟题,没什么收获,刷手速。

    235. 二叉搜索树的最近公共祖先

    235. 二叉搜索树的最近公共祖先

    题目介绍

    给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

    百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

    例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

    示例 1:
    在这里插入图片描述

    输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
    输出: 6
    解释: 节点 2 和节点 8 的最近公共祖先是 6。

    示例 2:
    输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
    输出: 2
    解释:节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

    思路

    昨天的刷题中我们写了二叉树的寻找最近公共祖先,在那题中我们使用后序遍历从底向上搜寻整棵树,而对于本题的二叉搜索树中,树结构是有序的,我们只需从上向下寻找一个通路即可。一开始我们不确定p和q谁大谁小,分三种情况:1、当前节点大于俩个节点,那么我们要向左搜寻。2、当前节点小于俩个节点,那么我们要向右搜寻。1、当前节点处于俩个节点之间,该该节点就是所需要搜寻的节点。

    代码

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    
    class Solution {
        private:
            TreeNode* traversal(TreeNode* cur, TreeNode* p, TreeNode* q) {
                if (cur == NULL) 
                    return cur;
                // 中
                if (cur->val > p->val && cur->val > q->val) { // 左
                    TreeNode* left = traversal(cur->left, p, q);
                    if (left != NULL) {
                        return left;
                    }
                }
                if (cur->val < p->val && cur->val < q->val) { // 右
                    TreeNode* right = traversal(cur->right, p, q);
                if (right != NULL) {
                    return right;
                }
                }
                return cur;
        }
        public:
            TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
                return traversal(root, p, q);
            }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    收获

    在上一题的基础之上更换了思路,巩固了中序遍历的知识。

  • 相关阅读:
    教你 Java 注解与反射
    SVG了解与绘图应用
    【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
    lc[二叉树]---101.对称二叉树
    LeetCode 1113.报告的记录
    Docker Desktop 设置镜像环境变量
    [超详细] GraalVM打包含有JNI的本地镜像
    java多线程面试总结,字节跳动java面试题
    原来背后都是商业利益,看到网易和暴雪的解约之后,原来是要定以后的KPI,坐地起价,但是一个时代已经结束了,都留在了记忆之中
    为什么新的5G标准将为技术栈带来更低的TCO
  • 原文地址:https://blog.csdn.net/m0_54015435/article/details/128169199