【leetcode - 基础】编程能力( 4 / 20天 )

news2024/10/7 8:30:09

目录

Day - 1

896. 单调数列 - 简单ac

28. 找出字符串中第一个匹配项的下标 - KMP

1、kmp模板

2、java api 

Day - 2

110. 平衡二叉树 - 递归

1、自顶向下 - 暴力

459. 重复的子字符串 - 暴力

Day - 3

150. 逆波兰表达式求值 - 栈 + 后缀表达式

66.加一 - 模拟

Day - 4

1367. 二叉树中的链表 - dfs 枚举

43. 字符串相乘 - 模拟乘法


Day - 1

896. 单调数列 - 简单ac

896. 单调数列

class Solution {
    public boolean isMonotonic(int[] nums) {
        boolean f1=false,f2=false;
        for(int i=1;i<nums.length;i++)
            if(nums[i]<nums[i-1]) f1=true;
            else if(nums[i]>nums[i-1]) f2=true;
        if(f1&&f2) return false;
        return true;
    }
}

28. 找出字符串中第一个匹配项的下标 - KMP

28. 找出字符串中第一个匹配项的下标

1、kmp模板

【✓基础算法 2.4】KMP(完结)_Roye_ack的博客-CSDN博客

class Solution {
public:
    int strStr(string ss, string pp) {
        int n=ss.size(),m=pp.size();
        int ne[m+1];
        memset(ne,0,sizeof(ne));
        string s=" "+ss;
        string p=" "+pp;

        //求next[]
        for(int i=2,j=0;i<=m;i++)
        {
            while(j&&p[i]!=p[j+1]) j=ne[j];
            if(p[i]==p[j+1]) j++;
            ne[i]=j;
        }

        //kmp匹配
        for(int i=1,j=0;i<=n;i++)
        {
            while(j&&s[i]!=p[j+1]) j=ne[j];
            if(s[i]==p[j+1]) j++;
            if(j==m) return i-m;
        }
        return -1;
    }
};

2、java api 

class Solution {
    public int strStr(String haystack, String needle) {
        return haystack.indexOf(needle);
    }
}

Day - 2

110. 平衡二叉树 - 递归

110. 平衡二叉树

1、自顶向下 - 暴力

  • 构造一个获取当前节点最大深度的方法 depth(root)
  • 通过比较此子树的左右子树的最大高度差 abs(depth(root.left) - depth(root.right))来判断此子树是否是二叉平衡树
  • 若树的所有子树都平衡时,此树才平衡
class Solution {
    public boolean isBalanced(TreeNode root) {
        if(root==null) return true;
        return Math.abs(depth(root.left)-depth(root.right))<=1&&isBalanced(root.left)&&isBalanced(root.right);
    }

    public int depth(TreeNode root)
    {
        if(root==null) return 0;
        return Math.max(depth(root.left),depth(root.right))+1;
    }
}

459. 重复的子字符串 - 暴力

459. 重复的子字符串 

枚举每个子串n'的长度 

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        int n=s.length();
        //因为子串至少重复一次,所以子串长度n'<=n/2
        for(int i=1;i<=n/2;i++) //枚举n'串长度
            if(n%i==0)
            {
                String t=s.substring(0,i);
                String res="";
                for(int j=0;j<n/i;j++) res+=t;
                if(res.compareTo(s)==0) return true;
            }
        return false;
    }
}

Day - 3

150. 逆波兰表达式求值 - 栈 + 后缀表达式

150. 逆波兰表达式求值

思路:

后缀表达式:操作数在前边,操作符号在后边

  • 遇到数字先入栈
  • 遇到符号时,取出栈中两个数字,先出栈的为右操作数,后出栈的为左操作数
  • 计算的结果再压入栈
  • 最后栈剩下的元素即为结果
class Solution {
    public int evalRPN(String[] tokens) {
        int n=tokens.length;
        Deque<Integer> stk=new LinkedList<>();
        for(int i=0;i<n;i++)
        {
            String t=tokens[i];
            if(t.equals("+")||t.equals("-")||t.equals("*")||t.equals("/"))
            {
                int n2=stk.pop(),n1=stk.pop();
                switch(t)
                {
                    case"+":stk.push(n1+n2);break;
                    case"-":stk.push(n1-n2);break;
                    case"*":stk.push(n1*n2);break;
                    case"/":stk.push(n1/n2);break;
                    default:
                }
            }else stk.push(Integer.parseInt(t));
        }
        return stk.pop();
    }
}

 

66.加一 - 模拟

66. 加一

从个位开始遍历,如果此位为9,则+1进位变为0,前面一位+1后返回答案数组

如果所有位数均为9,则数组长度+1,首位为1

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--)
            if(digits[i]==9) digits[i]=0;
            else
            {
                digits[i]+=1;
                return digits;
            }
        //如果所有位都是9 则长度+1
        digits=new int[digits.length+1];
        digits[0]=1;
        return digits;
    }
}

Day - 4

1367. 二叉树中的链表 - dfs 枚举

1367. 二叉树中的链表

思路:

从根节点开始,遍历所有点,每次dfs都是以该点为起点查找是否有与链表匹配的路径

dfs中

  • 如果链表遍历完,说明匹配成功
  • 如果树遍历完,说明匹配失败
  • 如果当前点值不相同,说明匹配失败
  • 如果当前点值相同,则继续向下查找,左右只要有一条路满足即可
class Solution {
    public boolean dfs(ListNode head,TreeNode e)
    {
        if(head==null) return true; //链表已经匹配完
        if(e==null) return false; //二叉树访问到空节点
        
        if(head.val!=e.val) return false;

        return dfs(head.next,e.left)||dfs(head.next,e.right); //左右只要有一条匹配上就ok
    }

    public boolean isSubPath(ListNode head, TreeNode root) {
        if(root==null) return false;
        //从根节点开始向下枚举,以每一个节点为起点的路径,看是否与链表匹配
        return dfs(head,root)||isSubPath(head,root.left)||isSubPath(head,root.right);
    }
}

43. 字符串相乘 - 模拟乘法

43. 字符串相乘

思路:

class Solution {
    public String multiply(String num1, String num2) {
        int n1=num1.length(),n2=num2.length();
        int[] a=new int[n1],b=new int[n2];
        for(int i=n1-1;i>=0;i--) a[n1-i-1]=num1.charAt(i)-'0'; //a[3,2,1] 
        for(int i=n2-1;i>=0;i--) b[n2-i-1]=num2.charAt(i)-'0'; //b[6,5,4]

        int[] c=new int[n1+n2];
        for(int i=0;i<n1;i++)
            for(int j=0;j<n2;j++)
                c[i+j]+=a[i]*b[j];
        
        int t=0; //t为进位数
        for(int i=0;i<c.length;i++)
        {
            t+=c[i];
            c[i]=t%10;
            t/=10;
        }

        int k=c.length-1;
        while(k>0&&c[k]==0) k--; //去掉前导0
        StringBuilder res=new StringBuilder();
        //翻转
        for(int i=k;i>=0;i--) res.append((char)(c[i]+'0'));
        return res.toString();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tensorflow 基础与实战

目录 一、线性回归实现 1.1 数据加载与查看绘图 1.2 模型建立、训练与预测 二、神经网络实现 2.1 数据加载与查看绘图 2.2 模型建立、训练与预测 三、逻辑回归实现 3.1 数据加载与查看绘图 3.2 模型建立、训练与预测 四、softmax分类 4.1 数据加载 4.2 数据归一化 …

ReadyAPI x64bit 3.43.0 Crack

ReadyAPI 允许团队在一个集中的界面中创建、管理和执行自动化的功能、安全和性能测试——为敏捷和 DevOps 软件团队提高 API 质量。 ReadyAPI 在单一平台上提供三个模块&#xff1a; 在ReadyAPI 测试模块中&#xff0c;您创建功能测试以验证您的服务是否按预期工作。您可以使用…

高频数组算法

1.二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输…

程序员的职业生涯个人规划(附上学习资料)

目录 前言 1.程序员的规划 2.程序员的进化路径 3.IT行业的难度 4.你的选择 5.再谈谈资本、工具人和内卷 总结&#xff1a; 前言 今天不讲技术也不讲干货&#xff0c;来聊一聊程序员职业生涯的个人规划。希望对不管是想入门的还是已经在这条路上的朋友能有一个帮助。 1.程…

opencv之直方图绘制及均衡化

直方图均衡化优势&#xff1a;增强图像对比度&#xff0c;使对比度较低的局部区域获得高对比度。当图像非常暗或者非常亮&#xff0c;并且背景和前景之间的差异非常小时&#xff0c;此方法非常有效&#xff0c;能够解决暴露过度或暴露不足的问题。直方图均衡化缺陷&#xff1a;…

多彩的书写工具,画图写字更好看,米家液晶小黑板多彩版上手

平时临时记些信息&#xff0c;或者是教小朋友认字的时候&#xff0c;液晶小黑板都是特别实用的工具&#xff0c;我之前就用过米家液晶小黑板&#xff0c;最近我发现米家新出了一款彩色笔迹的小黑板&#xff0c;书写效果更加好看&#xff0c;比以前单色款的更好用。 这款米家液晶…

【技术分享】MA21日均线交易策略

文章目录1.前言1.1.相关术语1.2.MA均线系统设置分类1.3.斐波那契数列2.MA21日均线2.1.MA21日均线2.2.MA21日均线交易策略2.3.MA21日均线案例分析1.前言 1.1.相关术语 空头市场&#xff08;Bear Market&#xff09;&#xff1a;亦称熊市&#xff0c;指价格长期呈 下跌 趋势的证…

操作系统权限提升(十)之系统错误配置-计划任务提权

系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 操作系统权限提升(三)之Windows系统内核溢出漏洞提权 操作系统权限提升(四)之系统错误配置-Tusted Service Paths提权 操作系统权限提升(五)之系统错误配置-PATH环境变量提权 操作…

VUE3.0学习

一、父子传值 父组件向子组件传值和vue2.0相比区别不大&#xff0c;区别在于api的使用&#xff0c;让接收参数的写法多样化。父组件::::: <template><div class"about"><div><main><TheWelcome :info"parMsg"/></main>…

【react】理解Fiber

FiberFiber概念结构Fiber 树的遍历是这样发生的【深度遍历】。window.requestIdleCallback()requestAnimationFrameFiber 是如何工作的结论有react fiber&#xff0c;为什么不需要vue fiberFiber 概念 JavaScript引擎和页面渲染引擎两个线程是互斥的&#xff0c;当其中一个线…

12月 被大厂以“人员优化”的名义 无情的辞退了...

前几天&#xff0c;一个认识了好几年在大厂工作的测试员朋友&#xff0c;年近30了&#xff0c;却被大厂以“人员优化”的名义无情被辞&#xff0c;据他说&#xff0c;有一个月散伙饭都吃了好几顿…… 在很多企业&#xff0c;都有KPI考核&#xff0c;然后在此基础上还会弄个“…

IB EE 学习干货,从选学科/课题/写稿/对稿/交稿几个方面入手分享

本文从选学科&#xff0c;选课题&#xff0c;写稿&#xff0c;对稿&#xff0c;交稿几个方面入手分享。关于不同学科的EE&#xff0c;本文涵盖了数学和物理EE&#xff08;因为我们猜很多同学们都选了这两个学科的EE&#xff09;。 文中分享的学习方法都是我们从个人经历出发&am…

微服务 @SentinelResource 服务网关

微服务 SentinelResource 服务网关SentinelResourceFeign整合Sentinel什么场景下需要Feign集合Sentinel呢&#xff1f;服务网关为什么需要网关网关组件Gateway快速入门什么是Gateway操作示例自定义路由规则SentinelResource 自定义异常返回是对所有的情况进行统一处理&#xf…

DTC补货实战:从算法到落地

本文作者&#xff1a;凡飞&#xff0c;从快递到快消&#xff0c;一个平凡的供应链算法深耕者。“ 我希望衡量我们ai团队价值的&#xff0c;不是创造了多么精深的算法&#xff0c;而是跨越算法到落地间距离的能力。”近年来随着电商行业从增量市场逐步成长到了存量市场&#xff…

第二章.神经网络—激活函数

第二章.神经网络 感知机存在如何设置合适的权重问题&#xff0c;神经网络的出现就是为了解决感知机存在的问题&#xff0c;神经网络的一个重要性质&#xff1a;它可以自动的从数据中学习到合适的权重参数。 2.1.从感知机到神经网络 1.神经网络示例 1).示意图&#xff1a; 网络…

《技术领导力:程序员如何才能带团队》 读书笔记

技术管理工作 管理者能力 作为技术团队管理者&#xff0c;无论具体管几个人&#xff0c;最好能够拥有以下能力&#xff0c;才能满足各个需求方提出的需求&#xff1a; 深入理解一门或多门编程语言深入理解多种流行的框架系统架构能力强&#xff0c;拥有复杂系统的设计经验积…

Hystrix高可用框架

Hystrix是什么 Hystrix Home,Hystrix是高可用性保障的一个框架。Netflix的API团队从2011年开始做一些提升系统可用性和稳定性的工作,Hystrix就是从那时候开始发展的。在2012年的时候,Hystrix就变得比较成熟和稳定了,Netflix中除了API团队以外,很多其他的团队都开始使用Hy…

vue2.6.10+vite2开启template模板动态编译

在从vue-cli迁移到vite2的时候&#xff0c;之前在代码中使用的模板编译遇到了问题&#xff1a;我在项目中会根据后台返回的内容动态渲染&#xff0c;如果返回内容中有<el-image>等标签&#xff0c;v-html无法识别非html标签&#xff0c;导致图片渲染失败&#xff0c;因此…

基于Springboot搭建java项目(三十二)—— Docker部署java服务

Docker部署java服务 一、Linux服务安装Docker 关于Docker的安装在之前的Linux的三种安装方式的第三种安装方式中有介绍 传送门&#xff1a;https://blog.csdn.net/m0_46616045/article/details/128841396 二、编写DockerFile 1、将需要部署的Jar包放到服务器上 2、编写Doc…

3.【SpringBoot源码】SpringBoot自动配置原理

目录 一、简介 1)、SpringBootConfiguration 2)、ComponentScan 3)、EnableAutoConfiguration 二、AutoConfigurationPackage 三、Import(AutoConfigurationImportSelector.class) 1)、AutoConfigurationImportSelector介绍 2)、自动配置流程 2-1)、ConfigurationClas…