- 博客(19)
- 收藏
- 关注
原创 java算法训练第十七天
目录题库一、杨辉三角1.双数组求解2.单数组求解二、旋转图像1.额外数组解法2.额外变量解法题库一、杨辉三角给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。原题1.双数组求解建立两个 list 集合,一个作为最终的返回结果,另一个作为暂时存储某一行的杨辉三角的结果,我们计算出杨辉三角的每一层的结果并替换存储在集合中,直到目标层数。代码如下: public List<Integer> getRow(
2022-03-25 16:16:33
594
原创 java算法训练第十六天
目录题库一、颜色分类1.三指针解法(个人想法,遍历数组一次)2.单指针解法(遍历数组两次)二、合并区间先排序,再判断题库一、颜色分类给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。原题1.三指针解法(个人想法,遍历数组一次)建立三个指针 red,blue,p ,red指针指向红色元素的末尾,blu
2022-03-24 21:34:45
607
原创 java算法训练第十五天
目录题库一、只出现一次的数字异或解法二、多数元素1.哈希表解法2.摩尔投票法三、三数之和排序加双指针解法总结题库一、只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。原题异或解法异或运算的性质:1.任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。2.任何数和其自身做异或运算,结果是 0,即 a⊕a=0。3.异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。依靠这三条性质,
2022-03-23 21:58:09
582
原创 java算法训练第十四天
目录题库一、两数之和深度优先和哈希表解法二、二叉搜索树的最近公共祖先结点一次遍历解法总结题库一、两数之和给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。原题深度优先和哈希表解法利用深度优先思维进行遍历,然后把访问到的结点的值在哈希表中查找是否存在 k-root.val 的值,如果存在,则返回true;如果不存在,则把该结点的值加入哈希表中,直到遍历结束返回false。代码如下: Set<Integer>
2022-03-22 22:04:41
1409
原创 java算法训练第十三天
目录题库一、二叉搜索树中的搜索1.递归思维2.迭代思维3.当该二叉树不为搜索树(个人想法)二、二叉搜索树中的插入操作1.递归思维(个人想法)2.迭代思维三、两数相加双指针解法(个人想法)总结题库一、二叉搜索树中的搜索给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。原题1.递归思维运用二叉树的深度优先搜索,当访问到的结点的值大于目标值时,搜索结点的左子树,反之搜索
2022-03-21 20:45:45
424
原创 Java算法训练第十二天
目录题库一、翻转二叉树递归解法二、路径总和递归解法总结题库一、翻转二叉树给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。原题递归解法运用递归思维,题目可以从叶子结点开始翻转,但访问到的结点是叶子结点时则不做任何操作。代码如下: public TreeNode invertTree(TreeNode root) { if(root == null) return root; TreeNode left = in
2022-03-20 17:13:39
460
原创 java算法训练第十一天
文章目录题库一、二叉树的层序遍历广度优先和队列解法二、二叉树的最大深度递归解法三、对称二叉树递归解法总结题库一、二叉树的层序遍历给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。原题广度优先和队列解法建立集合存储最终数据,建立队列暂时存储数据。按从根到叶,从左到右的顺序遍历二叉树,把访问到的结点的值和左子结点的值,右子结点的值依次加入队列,然后再取出加入集合。代码如下:public List<List<Integer>>
2022-03-19 22:13:54
706
原创 java算法训练第十天
目录题库一、二叉树的三种遍历方式(递归思维)1.前序遍历2.中序遍历3.后序遍历二、验证二叉搜索树1.递归解法2.中序遍历解法总结题库一、二叉树的三种遍历方式(递归思维)给你二叉树的根节点 root ,返回它节点值的 前序(中序,后序) 遍历。1.前序遍历原题代码如下: public List<Integer> preorderTraversal(TreeNode root) { List<Integer> st = new ArrayList&
2022-03-18 21:52:36
289
原创 java算法训练第九天
目录题库一、有效的括号用栈解法(个人想法)二、用栈实现队列1.构造函数和属性2.push函数3.pop函数4.peek函数5.empty函数总结题库一、有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。原题用栈解法(个人想法)观察题目的括号要求,发现后出现的左括号要先配对,符合栈后进先出的思维。代码如下: Stack<Character>
2022-03-17 13:12:11
69
原创 java算法训练第八天
目录题库一、反转链表三指针解法二、删除排序链表中的重复元素1.双指针解法(个人想法,更节省空间)2.单指针解法总结题库一、反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原题三指针解法建立三个工作指针 p1,p2,p3 ,遍历链表,p1指向当前元素,p2指向下一个元素,p3指向p2的下一个元素,依靠三个指针互相变化来反转链表。代码如下:if(head == null) return head; ListNode p1 = head,p2 = head.ne
2022-03-16 17:30:45
1480
原创 java算法训练第七天
目录题库一、环形链表1.哈希表解法2.快慢指针解法(花费时间更少)二、合并两个有序链表双指针解法三、移除链表元素指针、节点结合解法总结题库一、环形链表给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则
2022-03-15 22:06:45
600
原创 java算法训练第六天
目录题库一、字符串中的第一个唯一字符两次遍历解法二、赎金信统计字符解法三、有效的字母异位词1.排序比较解法2.统计字符解法总结题库一、字符串中的第一个唯一字符给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。原题两次遍历解法先遍历数组并使用HashMap存储字符和次数,再遍历一次查找第一个不重复的字符。代码如下:Map<Character,Integer> m = new HashMap<Character,Integer&g
2022-03-14 21:09:27
941
原创 Java算法训练第五天
目录题库一、有效数独一次遍历解法二、矩阵置零1.标记数组解法(空间消耗较大)2.标记变量解法(空间消耗较小,代码更繁琐)总结题库一、有效数独请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。1.数字 1-9 在每一行只能出现一次。2.数字 1-9 在每一列只能出现一次。3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。原题一次遍历解法创建三份空间,分别存储每一行,每一列,每一个小九宫格是否有效。代码如下:int[][]
2022-03-13 22:30:48
594
原创 java算法训练第四天
目录题库一、重塑矩阵直接计算(个人做法)二、杨辉三角List集合求解总结题库一、重塑矩阵在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;
2022-03-12 22:10:58
71
原创 java算法训练第三天
目录题库一、两个数组的交集||1.哈希表2.二、买卖股票的最佳时机1.个人想法2.总结题库一、两个数组的交集||给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。原题1.哈希表选用HashMap集合;先遍历两个数组中较小的一个,把它的数据和出现的次数储存在哈希表中,然后遍历另外一个数组,如果哈希表中有该数据,则减少次数。代码如下:i
2022-03-11 22:58:15
81
原创 java算法练习第二天
目录题目一、两数之和1.暴力破解(结果时间过长)2.哈希表二、合并两个有序数组1.直接合并数组,再进行排序(结果时间过长)2.边排序,边合并总结题目提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下
2022-03-10 20:59:46
1072
原创 学习分治算法
目录分治的概念分治题目的特征分治的解题步骤二、运用1.归并排序(1)思路(2)示例2.快速排序总结分治的概念人们在遇到一个难以解决的大问题时,自然会想到把它划分成一些规模较小的子问题,各个击破,分而治之。分治题目的特征(1)平衡子问题:子问题的规模大致相同,能把问题划分成大小差不多相等的k个子问题,最好k=2,即分成两个规模相等的子问题。子问题规模相等的处理效率比子问题规模不等的处理效率要高。(2)独立子问题:子问题之间相互独立。这是区别于动态规划算法的根本特征,在动态规划算法中,子问题是相互
2021-08-20 15:45:25
175
原创 第十二届蓝桥杯省赛C/C++B组填空题个人想法
一字节等于8位,1MB=220B,答案为:256*2^20/4=67108864。考试的时候完全没想到,gg!!! #include <iostream> using namespace std; int cnt[15]; int main() { for(int i=0;i<=9;i++) cnt[i]=2021; int i; for(i=1;;i++){ int t=i; ...
2021-04-25 20:42:51
202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人