算法基础十四

Python学习之旅:进阶阶段(十四)算法基础-线性搜索 线性搜索,也叫顺序搜索,是一种最基本的搜索算法。简单来说,它的核心操作就是从数据集合的第一个元素开始,按照顺序逐个检查每个元素,直到找到目标元素或者遍历完整个数据集合。比如你有一本单词书,要查找某个单词的释义,你会从第一页开始,一页一页地翻找,直到找到那个单词,这就是线性搜索的过程。 阅读详情

二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
示例 2:
输入:root = [1,null,2] 输出:2


 public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }

        int leftHeight = maxDepth(root.left);
        int rightHeight = maxDepth(root.right);
        return Math.max(leftHeight, rightHeight) + 1;
    
    }

罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

示例 1:
输入: s = “III” 输出: 3
示例 2:
输入: s = “IV” 输出: 4
示例 3:
输入: s = “IX” 输出: 9
示例 4:
输入: s = “LVIII” 输出: 58 解释: L = 50, V= 5, III = 3.
示例 5:
输入: s = “MCMXCIV” 输出: 1994 解释: M = 1000, CM = 900, XC = 90, IV = 4.



    Map<Character, Integer> symbolValues = new HashMap<Character, Integer>() {{
        put('I', 1);
        put('V', 5);
        put('X', 10);
        put('L', 50);
        put('C', 100);
        put('D', 500);
        put('M', 1000);
    }};

    public int romanToInt(String s) {
        int ans = 0;
        int len = s.length();

        for(int i = 0; i < len; ++i) {
            int value = symbolValues.get(s.charAt(i));
            if (i < len - 1 && value < symbolValues.get(s.charAt(i + 1))) {
                ans -= value;
            } else {
                ans += value;
            }
        }

        return ans;
    }

最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。

示例 1:
输入:strs = [“flower”,“flow”,“flight”] 输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”] 输出:“” 解释:输入不存在公共前缀。


 public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }

        String prefix = strs[0];

        int count = strs.length;
        for(int i = 0; i < count; i++) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (prefix.length() == 0) {
                break;
            }
        }

        return prefix;
    }

    private String longestCommonPrefix(String str1, String str2) {
        int length = Math.min(str1.length(), str2.length());
        int index = 0;

        while(index < length && str1.charAt(index) == str2.charAt(index)) {
            index++;
        }

        return str1.substring(0, index);
    }

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

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

示例 1:
输入:haystack = “sadbutsad”, needle = “sad” 输出:0
解释:“sad” 在下标 0 和 6 处匹配。第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = “leetcode”, needle = “leeto” 输出:-1
解释:“leeto” 没有在"leetcode" 中出现,所以返回 -1 。

  public int strStr(String haystack, String needle) {
        int len = haystack.length();

        int m = needle.length();

        for(int i = 0; i + m <= len; i++) {
            boolean flag = true;
            for (int j = 0; j < m; j++) {
                if (haystack.charAt(i + j) != needle.charAt(j)) {
                    flag = false;
                    break;
                }
            }

            if (flag) {
                return i;
            }
        }

        return -1;
    }

最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:
输入:s = “Hello World” 输出:5 解释:最后一个单词是“World”,长度为5。
示例 2:
输入:s = " fly me to the moon " 输出:4 解释:最后一个单词是“moon”,长度为4。
示例 3:
输入:s = “luffy is still joyboy” 输出:6 解释:最后一个单词是长度为6的“joyboy”。

  public int lengthOfLastWord(String s) {
        int end = s.length() - 1;

        while(end >= 0 && s.charAt(end) == ' ') {
            end--;
        }
        
        if(end < 0) {
            return 0;
        }
        
        int start = end;
        
        while(start >= 0 && s.charAt(start) != ' ') {
            start--;
        }
        return end - start;
    }
OpenCV开发笔记(十四):算法基础之线性滤波-方框滤波 若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.youkuaiyun.com/qq21497936 原博主博客导航:https://blog.youkuaiyun.com/qq21497936/article/details/102478062 本文章博客地址: OpenCV开发笔记(十四):算法基础之线性滤波-方框滤波 前言 本篇开始正式进入算法学习,学习的算法都... 阅读详情

相关推荐

《算法零基础100讲》之 第十四讲:搜索算法(Searching Algorithms)

搜索算法用于在数据结构中查找特定元素。线性搜索(Linear Search)二分搜索(Binary Search)搜索算法是计算机科学中的基础算法,用于在数据结构中查找特定元素。线性搜索适用于未排序的数据集,而二分搜索适用于已排序的数据集,效率更高。通过本讲的学习,你应该能够理解并实现这两种常见的搜索算法。

u010117029的博客 79

【基础篇】十四、GC算法

GC是在一个单独的线程,但不管JVM用哪种算法,都会存在一个阶段需要停止所有的用户线程,称Stop The World(STW),SWT大,用户用起来自然卡。补充:如果现在新生代已经满了,Minor GC还是满,再来对象,尽管新生代有的对象没到达年龄阈值,也会被搬到老年代。组合使用了上面的几种算法,被主流使用。以上三个指标,不可兼得。一句话:将存活的对象搬运到另一块空间,清理掉当前空间,互换名字。GC开始,把GC Root对象和可达的对象搬到To空间。清掉From空间,并把原来的To改为From空间。

llg___的博客 1463

FLUKA软件在Ubuntu的安装指南(亲测有效)

FLUKA其强大的蒙特卡洛模拟能力使得用户能够模拟复杂的辐射相互作用过程

chencheng1127的博客 2885

算法设计与分析基础(十四)

算法设计与分析基础(十四) 练习题 习题一 给出选择排序算法的递归描述,并分析算法的计算复杂度。 解:算法思想 1.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2.从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 3.重复第二步,直到所有元素均排序完毕。 算法形式化描述: Algorithm SelectionSort(A[0 ... n-1], n, index) //输入:序列A[0 ... n-1],序列规模n,未排序序列的起始位置index begin if

BKSW.的博客 1255

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6355

VirtualLab初学者教程-1.用户界面

目录前言一、VirtualLab Fusion简介1.软件2.内置工具箱:二、用户界面认识1.上方菜单栏2.右侧面主窗口3.底部窗口附 前言 感觉做VirtualLab的资料不是特别多,可能用的朋友也比较少吧,笔者最近也因为大创需要刚刚开始入门,把网上有的英文资料整理了一下,加了一点自己的内容发出来希望帮助更多在学习中的朋友,有用词不当之处还请多多包涵。 一、VirtualLab Fusion简介 因为是第一讲,简单啰嗦一下软件本身,参考官方介绍。 1.软件 VirtualLab是由德国LightTran

ClaireTang1的博客 2万+

机器学习——基础算法(十四)

机器学习——基础算法(十四) 一、LDA的应用方向 二、朴素贝叶斯的分析 三、Beta (一)Beta分布 (二)Beta分布的期望 (三)Beta分布 四、LDA涉及的主要问题 (一)共轭先验分布 (二)二项分布与先验举例 (三)先验概率和后验概率的关系 (三)共轭先验的直接推广 (四)Dirichlet分布 (五)Dirichlet分布的期望 (六)Dirichlet分...

qq_41511262的博客 445

人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念

人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1925

算法基础篇:(十四)基础算法之递归初阶:从汉诺塔到 FBI 树,解锁递归的奥秘

本文介绍了递归算法的核心概念和应用。通过三个经典案例(汉诺塔、占卜DIY、FBI树)展示了递归的解题思路:将大问题分解为相似子问题,直到满足终止条件。文章还分析了递归的常见误区(如终止条件缺失、重复计算)以及与迭代的对比。递归适用于具有明显子问题结构的情况,其代码简洁但需注意栈溢出风险。通过实践练习可以掌握递归思维,这种"将问题交给未来解决"的勇气是算法学习的重要能力。

2301_79248256的博客 1152

单细胞数据分析(三):单细胞聚类分析

本文介绍了单细胞聚类分析的基本概念及其在单细胞RNA测序(scRNA-seq)数据中的应用。单细胞聚类分析通过将具有相似基因表达模式的细胞分组到不同的簇中,帮助识别细胞类型、状态和功能。文章详细展示了使用R语言中的Seurat包进行单细胞数据聚类分析的步骤,包括数据加载、降维、聚类和结果可视化。通过FindNeighbors和FindClusters函数,文章展示了如何基于降维数据进行细胞聚类,并选择合适的分辨率值。

专注生信领域 1905

ncode控件使用总结

数据格式txt转s3t #HEADER #TITLES Absolute_Time,COG_Ax,COG_Ay,COG_Az,LF_SPINDLE_AZ #UNITS ,g,g,g,g, #DATATYPES Double,Float,Float,Float,Float #DATA 2. 导入s3t数据 3. 输入数据控件 直接拖入数据源或者添加控件数据 4.

技术联盟 2006

算法基础期末考点总结十四——数据结构的扩张

书上讲数据结构的扩张有两个例子:扩张域为秩的选择算法以及扩张域为右区间最大值的区间树算法。 选择算法 所以找第i小元素的算法: 确定元素秩的算法: 维护扩张域的算法,在旋转算法里加上:(以左旋为例) 区间树 扩张的域为int(包括区间的左端点和右端点),max,子树中所有右端点的最大值。 维护: 检查区间是否有重叠的区间: ...

weixin_43416013的博客 208

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 765

基础数据结构和算法十四:Directed Graphs

  In directed graphs, edges are one-way: the pair of vertices that defines each edge is an ordered pair that specifies a one-way adjacency. Many applications (for example, graphs that represent the ...

George's dev dream port 1098

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【深度学习基础】第三十四课:YOLO算法

本部分来说说在YOLO算法中如何定义bounding box,即bxbybhbwbx​by​bh​bw​的值。我们约定每一个格子左上角的坐标为00(0,0)00,右下角的坐标是11(1,1)11其中,bxbyb_x,b_ybx​by​的范围在0到1内,而bhbwb_h,b_wbh​bw​则有可能大于1。

qq_34222839的博客 1367

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

算法设计与结构基础作业第十四周

35.Search Insert Position Description: Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. Y

qianggezuishuai的博客 232

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【算法基础篇】(三十四)图论基础深度解析:从概念到代码,玩转图的存储与遍历

本文系统介绍了图论的基础知识,包括图的基本概念、存储方式和遍历算法。首先讲解了无向图、有向图、简单图、稠密图等基本概念,以及顶点度、路径、连通性等关键特性。接着详细对比了三种图的存储方式:邻接矩阵适合稠密图,vector数组和链式前向星更适合稀疏图。最后深入解析了DFS和BFS两种遍历算法,包括实现代码和应用场景。文章通过生活化类比和C++代码示例,帮助读者从零掌握图论基础知识,为学习更复杂的图算法打下坚实基础。

2301_79248256的博客 3436

代码随想录算法训练营第二十四天 |回溯算法理论基础、77. 组合

回溯算法 组合 剪枝操作

hewfhpiwjgjfw的博客 1206

【代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合】

有没有人一开始和我一样使用的是双重循环,可能开始我把问题想的简单了,双重循环在n=i,k = 1的情况下是不好写的,要么就的把k=1的这种情况列出来,还是有点麻烦的,不过有兴趣的可以试一试。这里我想多说一个另外的话题,就是组合也不是没有规矩的组合,确实是随意选取两个数字组合不假,但是选取数字也是有规矩的,比如1,2,3,当1在前面时就组合{1,2}{1,3},不能到了3这里再去组合{1,3}。然后就是对path的清空,如果不清空,则ans的每个元素中的个数就不能保证是k个了。我室一看就会,一写就废。

qq_44810048的博客 515

基础算法(Leetcode)刻意练习第二十四天——树

引言 由 “LSGO软件技术团队” 组织的 “基础算法刻意练习” 采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。以下是我的每日打卡记录: Task24.恢复二叉搜索树 Leetcode第99题 难度:困难 题目概述: 二叉搜索树中的两个节点...

qq_45484498的博客 264

代码随想录算法训练营十四天 | 二叉树基础

代码随想录算法训练营十四天 | 二叉树基础

贝塔的博客 87

算法训练第二十四天|回溯算法理论基础、77. 组合

算法训练第二十四天|回溯算法理论基础、77. 组合

weixin_43434369的博客 2088

算法基础期末考点总结二十四——所有节点对的最短路径问题

简单粗暴的方法 对每个点,做一次单源最短路径算法。 如果有负权值,必须选用bellman-ford算法,在稠密图里,时间复杂度高达O(n^4) 运算重载+重复平方 我们定义一个lij(m)为i到j的边至多有m条的最短路径权值之和。 那么我们有初始化: 有递推式: 时间复杂度为O(V^4),没有改进。 这时我们发现算法和矩阵乘法很像,而且对于l数组,有一个性质就是l(m+1)=l(m)(当m大于V-1时),所以我们每次求平方,使得时间复杂度变为O(V^3lgV) Floyd-Warshall算法 定义di

weixin_43416013的博客 472

视觉SLAM总结——视觉SLAM十四讲笔记整理

SLAM笔记整理基础知识点1. 特征点、描述子、特征匹配相关问题 基础知识点 1. 特征点、描述子、特征匹配 这是整个SLAM系统最开始的部分,先提取特征点和描述子,然后进行特征匹配,通过匹配的特征点才求取的相关变换矩阵,这里容易搞混特征点和描述子的概念。 (1)特征点 Harris角点:就是一个根据特征小窗口在不同方向上的移动,不同的变化形式即为不同特征(角点、边界),转化到数学公式里面最后就是...

weixin_44580210的博客 8943

算法设计与应用基础:第十四周

343. Integer Break Add to List DescriptionHintsSubmissionsSolutions Total Accepted: 40852Total Submissions: 89682Difficulty: MediumContributor: LeetCode Giv

Mashirowww的博客 428
上一篇: 算法基础十三
下一篇: 算法基础十五
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值