![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法java
初遇见
在你选择的道路上,坚持走下去,时间总会给你答案
展开
-
java-初始化链表
1、定义链表的结构2、给链表赋值原创 2022-06-05 16:42:49 · 1652 阅读 · 1 评论 -
力扣26题-删除排序数组中的重复项(java)
题目描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:数组有序,重复元素会相邻,要求删除重复元素,就是把不重复的元素移到数组的左侧。做法双指针,两个指针都指向数组中第一个元素。算法步骤第一步:比较 i 和 j 是否相等第二步:如果相等 i 后移1位第三步:不相等,把i位置复制到 j+1 位置,i 后移一位,j 后移一位重复这个过原创 2021-02-27 22:15:36 · 188 阅读 · 0 评论 -
对称二叉树-java
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。题意:第一个实例,第二层左子树的左节点=右子树的右节点第三层,左子树的节点的左面等于右子树节点的右面左子树的节点的右边等于右子树节点的左边这样属于镜像对称有点像是一张纸,你把纸对折,这样对折了也是相等了对在一起方法一:递归的方法第一步:明确函数的参数和返回值类型 boolean dfs(TreeNode left,TreeNode right){ }第二步:递归的结原创 2021-02-25 18:58:39 · 262 阅读 · 1 评论 -
二叉树的遍历(递归,迭代)-java
二叉树遍历的种类前序遍历根节点-左子树-右子树中序遍历左子树 - 根节点-右子树后序遍历左子树 - 右子树 - 根节点前序遍历根节点-左子树-右子树1,2,4,5,3,6,7中序遍历左子树 - 根节点-右子树4,2,5,1,6,3,7后序遍历左子树 - 右子树 - 根节点4,5,2,6,7,3,1遍历的起名和根节点所在的位置有关,根节点是一个对角线。递归递归就是在方法的内部,再次调用方法本身。简单的来说就是不停的自己调用自己,如果没有结束的条件,就会形成死循环原创 2021-02-25 15:06:10 · 215 阅读 · 1 评论 -
算法基础-递归(java)
递归递归就是在方法的内部,再次调用方法本身。简单的来说就是不停的自己调用自己,如果没有结束的条件,就会形成死循环,造成内存溢出java.lang.StackOverflowError。public class Test { public static void main(String[] args) { speak(); } static void speak() { speak(); }}递归第一般来说有三步明确函数要做什么明确递归的结束条件(不然会造成死循环)找到函数原创 2021-02-25 10:43:53 · 106 阅读 · 1 评论 -
二叉树排序算法(java)
二叉树主要包括根节点,左孩子和右孩子二叉排序的基本原理:把第一个元素作为根节点,之后的元素如果比第一个元素大,放到右面,否则放到左面算法步骤先声明一个节点类Node,里面有根节点,左孩子和右孩子然后创建一个构造函数里面放的是根节点然后写一个添加节点的方法,我们给他起名为add方法先把创建树的代码写一下class Node,声明一个节点类Node里面有根节点,左右孩子,然后创建一个根节点的构造方法,方便后面使用。class newTree{ class Node{ int data原创 2021-02-19 12:14:26 · 1465 阅读 · 1 评论 -
java-求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路第一种做法用公式n(n-1)/2= n^2 + npow是平方的意思public class Solution { public int Sum_Solution(int n) { // n(n-1)/ 2 = n^2 + n int num = (int)(Math.pow(n,2) + n);原创 2021-02-10 21:57:54 · 496 阅读 · 0 评论 -
java-第一个只出现一次的字符
第一个只出现一次的字符在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置如果没有则返回 -1(需要区分大小写).(从0开始计数)示例1输入"google"返回值4思路:先用一个count把字符串中字符出现的次数存储起来,然后找到第一个只出现一次的字符然后返回他的下标public class Solution { public int FirstNotRepeatingChar(String str) {原创 2021-02-09 21:58:51 · 304 阅读 · 0 评论 -
java-力扣-验证回文串
验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false,题意:什么是回文? 比如说 a b c c b a 是回文串;a b c b 不是回文串第一个示例只考虑数字和字母,空字符也属于有效的回文,其他的符号就都不算第一个示例可以看成原创 2021-02-09 20:28:51 · 294 阅读 · 0 评论 -
java实现-合并两个有序数组
合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1原创 2021-02-07 12:55:44 · 4276 阅读 · 0 评论 -
java -搜索二维矩阵 II
搜索二维矩阵 II编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。提示:m == matrix.lengthn == matrix[i].length1 <= n, m <= 300-109 <= matix[i][j] <= 109每行的所有元素从左到右升序排列每列的所有元素从上到下升序排列-109 <= target <= 1原创 2021-02-05 21:55:07 · 260 阅读 · 0 评论 -
java-多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2最开始的思路这个题给出一个新的概念,多元数组,多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。可以看给的输入样例的第一个,元素3,在第一个数组里面是2个,这个数组的长度是3,n=3,元素3出现的次数2次满足大于n/2第二个原创 2021-02-03 21:55:15 · 570 阅读 · 1 评论 -
java-插入排序
思想:有点像是玩扑克牌中的抓牌,比如说手里有一些牌,然后另一只手去抓新的,然后把他放到正确的位置上。百度百科的说法是插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。插入排序的时间复杂度是O(n^2),不同数据的情况下比如 1,2,3,4,5,那么时间复杂度会是O(n)。插入排序会比冒泡和选原创 2021-02-02 21:24:24 · 63 阅读 · 0 评论 -
java实现-只出现一次的数字
在一个整型数组中,一种数,出现了奇数次,其他所有数出现偶数次第一问:第一问如何找到出现了奇数次的数第二问:两种数出现了奇数次,其他所有数出现偶数次,这两个奇数分别是什么?先说一个运算符号,位运算的 ^ (异或),他是不同为1,相同为0比如:1 ^ 0=1,1^1 =0,0^ 1 =1,0^0=0,他的性质有三个:第一个可以看成是无进位相加.举一个栗子第二个性质:满足交换律和结合律第三个性质也是最重要的这道题用到了这个性质,就是一对数异或,不管什么顺序,最后的结果都是相同的,举一个例子原创 2021-02-02 20:42:28 · 478 阅读 · 2 评论 -
java实现-旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。输入[3,4,5,1,2]输出1思路乍的一看,这道题是输出最小值,想直接循环遍历整个数组,然后把最小的输出就行了,时间复杂度是O(n)但是这道题不是这个意思,第一句,是他提出的这个旋转数组的意思,根据看他给的输入,输出可以看出要找的最小值是两个递增数组的分界线,第一个递增数组:3,4,5 ,第原创 2021-02-01 21:25:24 · 117 阅读 · 0 评论