算法刷题
BLKNjy
java后端开发,略懂前端
展开
-
动态规划_之_子序列问题
最长公共子序列给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。解:设置子序列的问题==》十有八九是动态规划明确dp数组原创 2021-09-28 11:27:49 · 144 阅读 · 0 评论 -
二进制最右侧1及其应用
把一个整型数,提取最右侧的1int N=0000 1101 1000 1100变成ans=0000 0000 0000 0100ans=N&(~N+1)应用:一个数组中两种数出现了奇数次,其余的数都出现偶数次,找到并且打印这两种数(最右侧1的应用!)假设两种数是a和b,则两种数异或的结果为ab,则数组所有数异或的结果为ab。因为a!=b也就是a^b!=0,所以a和b某一位不相等。假设第8位不同,所以根据第8位为0和1,将数组中所有的数分为两组。将数组中第八位为1的数和 第八.原创 2021-08-31 11:09:39 · 431 阅读 · 0 评论 -
二叉树先序、中序和后序的递归玉非递归实现
目录标题递归非递归递归//无论是哪种递归,每个节点都可以回到自己三次。先序遍历就是i遇到节点的第一次打印//,中序遍历就是遇到节点的第二次打印,....public void f(Node head){ if(head==null)return; f(head.left); f(head.right);}//递归实现–无论是哪种递归,每个节点都可以回到自己三次。先序遍历就是i遇到节点的第一次打印//递归实现--无论是哪种递归,每个节点都可以回到自己三次。先序遍历就是i遇到节点的第一次原创 2021-08-17 23:42:59 · 171 阅读 · 1 评论 -
排序算法(3)
目录快速排序计数排序基数排序快速排序每次在数组中找一个标杆(轴),将数组重新排列,前面的数比轴小,后面的数比轴大。将数组分成了两部分。再从两部分各选择轴,一次再重新排列。将数组分成了四部分。思想:双指针,一个指向数组头一个指向数组尾部,同时向中间移动,头指针找到比轴大的停下,尾指针找到比轴小的停下,两者交换。再继续。public class Test { public static void main(String[] args) { int[] arr={7,3,2,原创 2021-08-11 00:29:28 · 98 阅读 · 0 评论 -
排序算法(2)
目录希尔排序归并排序(重要)希尔排序shell sort改进的插入排序:希尔排序(考的不多)思想:从第一个数开始经过固定间隔找出一组数,用插入排序排好。再从第二个数开始经过同样的间隔进行同样的排序…直到所有的数都排过一遍。间隔减1重复上述步骤…间隔再减1重复步骤…直到间隔为1先根据插入排序,写出gap=4的第一轮排序 public static void main(String[] args) { int[] arr={9,6,11,3,5,8,7,9,4,13,2};原创 2021-08-11 00:24:04 · 61 阅读 · 0 评论 -
排序算法(1)
简单排序选择排序(不重要)基本思想:一遍一遍过滤数组,找到最小的数,放到最前面。public class test { public static void main(String[] args) { int[] arr={5,3,6,8,1,7,9,4,2}; for(int i=0;i<arr.length-1;i++){ int minIndex=i; for(int j=i+1;j<arr原创 2021-08-11 00:11:00 · 52 阅读 · 0 评论 -
有限状态机
状态机题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。详细描述:数值(按顺序)可以分成以下几个部分:1.若干空格2.一个 小数 或者 整数3.(可选)一个 'e' 或 'E' ,后面跟着一个 整数4.若干空格小数(按顺序)可以分成以下几个部分:1.(可选)一个符号字符('+' 或 '-')2.下述格式之一:至少一位数字,后面跟着一个点 '.'至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字一个点 '.' ,后面跟着至少一位数字整数(按顺序)可以原创 2021-06-04 14:25:32 · 176 阅读 · 0 评论