![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 93
常见算法总结与思路讲解
zhangxiao123qqq
软工小生,记录点滴
展开
-
java char类型数值转int,以及获取ASCII码
char转int这是大家经常会遇到的问题,下面列出三种常见方法:(下面方法假设已经存在变量 char c = ’1‘)1.(int)(c - '0');这种方法是最快捷简单的方法,巧妙利用'0'字符。2. Integer.parseInt(String.valueOf(c))这种方法是将c转换为String,再转换为int。3. Character.getNumbericValue(c)Character包装类提供的转换方法,但是这个方法会将'a'转换为11而不是97! So weird!原创 2021-01-04 15:23:48 · 1676 阅读 · 0 评论 -
二分查找细节永不忘
二分查找中大于小于,甚至判断条件中的 < <= 很容易弄混。下面一起来捋清楚,保证了解原理,不会再错。重点的概念在于选区的区间!我建议选取的区间为左闭右闭,即[l,r]。当然其他方式也可以,我们不做讲述。因此需要注意以下三点即可:1.r = arr.length()-1 而不是length(),这样使得r为末数的下标,有意义。2. 判断终止条件为l < = r,因为 l,r 都是寻找目标,当其相等时,代表还有一个待验证目标。3. 每次缩小范围时,l = mid-1, r = mi原创 2020-12-29 11:37:12 · 9489 阅读 · 4 评论 -
剑指offer——把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路分析题目我们可以得知,序列中的数字,有着绝对的优先级,即若有a,b,c三个数字,当"a连接b"<“b连接a” 那么a优于b,ab的位置关系便确定,即:a肯定在b前。因此我们按照既定的规则对所有数字排序即可得到正确的顺序。之后将整个序列连接输出即可得到答案。因此,本题采用贪心算法,从最小的开始使用,.原创 2020-12-08 10:27:29 · 9480 阅读 · 0 评论 -
剑指offer——字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。题解思路:本题目为全排列,想到递归处理,思路较为简单,但是涉及类型之间的转换较为麻烦。难点:String->char[],得到字符数组,不支持删除某个字符,因此需要用到ArrayList,而字符数组并不能直接转为Ar.原创 2020-12-02 16:56:15 · 71 阅读 · 0 评论 -
int数组转 ArrayList对象 Arrays的asList方法
java中 `Arrays` 工具类中有`asList()`方法,可以用来将**对象数组**转换为**List对象**。但是当我们对**基本类型**的数组使用时会报错。原创 2020-12-02 11:16:44 · 10098 阅读 · 0 评论 -
剑指offer——求1+2+3+...+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题解思路:初次遇到这种题型,限制关键字,想要一定是使用递归,但递归的条件一般是使用if,本题中不可以使用判断,因此,学习到,有以下两种方法作为终止条件!使用逻辑的短路,将递归放置于逻辑的第二个运算位,当不满足第一个条件,第二位不会计算,达到终止效果。使用异常,当捕获异常时,即可终止递归。package com.JZOffer;//题目描述//求1.原创 2020-11-23 17:26:30 · 137 阅读 · 0 评论 -
Java Integer.parseInt与Integer.valueOf的区别
1. `Integer.ParseInt(String)`参数只能为`String`!只针对`String`类型!2 由于`Integer.valueOf()`参数可以为String或int,所以支持很多类型的参数: 1. 当参数为`byte, char, short`等能自动转换为`int`的类型时,会自动转换‘ 2.当参数类型为`char`时, `Integer.valueOf()`会计算`char`的Ascii码值’原创 2020-11-20 17:45:06 · 850 阅读 · 1 评论 -
剑指offer——二进制中1的个数
如题,题目很简单,只是统计一个十进制数字转为二进制数后1的个数。思路:本题逻辑很简单,由于Integer中有转换数字进制的方法,所以很容易得到二进制数字。但是方法返回的为String类型,因此涉及基本类型的转换,需要特别注意。注意:Integer.toBinaryString(int)返回值为String类型。String 拆解为CharArray()后还需要转为Int类型。特别注意:Char --> Integer的时候不可以直接使用等于,否则会按照ASCII码转换。应:使用以.原创 2020-11-20 17:40:29 · 102 阅读 · 0 评论 -
剑指offer——树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例1输入: {8,8,#,9,#,2,#,5},{8,9,#,2}返回值: true难度:本题在牛客-剑指offer中为难题,通过率为24%。题解思路:1.基本函数:判断B树是否被A树包含。2 遍历A树,逐个判断。心路历程:1. 本题首先想到的是,基本单元为:判断两棵树是否相同。因此编写函数boolean isEqual(rootA, rootB)判断。2. 在上述函数的基础上,做修.原创 2020-11-20 15:37:04 · 79 阅读 · 0 评论 -
剑指offer——二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:题目很容易想到递归,且出口条件也容易判断,target<0 ,或者target==0但是本题在牛客中通过率仅有26.6%,还是有一些坑的,主要记录此题心得。需要判空判空判空!! root判断是否为空,如果是,不能返回null,要返回需要的数据结构的空。二叉树的递归,需要判断传入的参数是否为空!比如find(root..原创 2020-11-19 18:25:06 · 88 阅读 · 0 评论 -
剑指offer——从上往下打印二叉树
使用队列层次输出二叉树加粗样式,难度较低,需要注意:判断root为空的情况每次从队列中poll,分别判断左右子树是否为空。队列的使用,Queue为接口,需要用ArrayList实现,入队出队分别为add 与 poll。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/**public class TreeNode { int val = 0; TreeNode le原创 2020-11-19 14:26:10 · 81 阅读 · 0 评论 -
剑指offer——栈的压入弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)采用实践尝试的方式基本思路点:当pushA[i] == popA[j] 则直接两个指针向后移动。然后循环 判断栈顶元素与popA[j]相同。如果相同则弹出栈顶,且 j++。pushA[.原创 2020-11-19 12:24:50 · 112 阅读 · 2 评论 -
排序算法复习——归并排序
java归并代码//归并排序import java.util.Arrays;public class mergeSort { //[l,m] (m-r] public static void merge(int[] arr, int l, int m, int r) { int[] arrdump = new int[arr.length]; System.arraycopy(arr, 0, arrdump, 0, arr.length);原创 2020-11-11 11:41:58 · 117 阅读 · 0 评论 -
排序算法复习——快排
java快排代码 public static int Partition(int[] arr, int low, int high) { // low的值已经被存入tmp,等待被覆盖 int tmp = arr[low]; int l = low, r = high; while (l < r) { while (l < r && arr[r] >= tmp) {原创 2020-11-09 21:23:14 · 84 阅读 · 0 评论 -
自底向上,自顶向下,归并排序 的 递归,非递归
归并排序可分为自顶向下与自底向上两种方法。其中自顶向下是指先将整个数组二分切割,再将切割得到后的子数组二分切割,直至所有子数组仅包含1个元素,之后再进行逐层Merge合并,因此最好使用递归实现。自底向上上是指,一开始就将整个数组执行:将相邻的2元素Merge, 将相邻的4元素Merge … 直至整个数组均Merge完毕即排序完毕。原创 2020-04-03 23:40:47 · 15476 阅读 · 1 评论