每日算法练习题第三篇

感受算法之美,领悟编程真谛!

Posted by LJJ on July 25, 2018

每日算法练习题第三篇

前述:数据结构与算法是计算机应用的基础,也是每一个有趣和富有内涵的工程师基本功,本系列文章旨在记录本小白学习算法的过程以及通过算法和数据结构练习来感受Computer Scince的巨大魅力,吸引着我一直在这上面不断探索摸寻。

注:题目均为转载,大部分来自leetcode–>见 leetcode中文站

栏目分级

通过题目的难度依次从易到难分为三个阶段:

  1. easy
  2. middle
  3. hard

实际演练

step1:二叉搜索树范围和:

给定二叉搜索树的根结点root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。

示例 1:
输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32

示例2:
输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23

解题思路:

  • 对于当前节点 node,如果 node.val 小于等于 L,那么只需要继续搜索它的右子树;如果 node.val 大于等于 R,那么只需要继续搜索它的左子树;如果 node.val 在区间 (L, R) 中,则需要搜索它的所有子树。
  • 第一种:利用深度优先搜索递归方法,操作方便,占用内存较大,复杂度为节点数。
  • 第二种:栈的迭代,复杂度为树的高度。

step2:转换成小写字母:

实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

示例 1:

输入: "Hello"
输出: "hello"
示例 2:

输入: "here"
输出: "here"

解题思路:

  • 遍历字符串,判断出字符串中的大写字符,再将其转化为小写,运用StringBuilder类的字符追加来操作,这里需要注意(char)的转型。

代码地址见:Github-Algorithm