算法刷题训练
该专栏主要总结一些剑指和力扣等的经典题目,争取做到一题多解,不断优化,提高算法思维
忱叁
走的远一点
展开
-
动态规划之 0-1 背包问题(进阶一维数组)包含回溯找方案
从这个情境导入的例子我们知道 想要通过面试的最大概率是你要保证在有效的时间内得到的考试概率是最大的由于这个情景不是原子性的,就是这几个算法模块是可以进行拆封的,那么你可以通过计算每个算法模块的价值率来进行计算...比如你一共只有8天时间,那么我们先对每个算法模块进行换算价值率然后进行降序排列,选中前三个模块花费的天数之后呢,还有2天,这个时候,你可以选择学完二叉树 又或者学两天的排序但是我们的价值率是每天花费的概率,而且这个一眼就可以看出来是可以进行拆分的,所以我们学2天的排序所得...原创 2022-05-08 15:33:00 · 904 阅读 · 0 评论 -
不同子序列(动归)
不同的子序列_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/ed2923e49d3d495f8321aa46ade9f873?tpId=46&tqId=29065&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-r原创 2022-05-08 10:42:02 · 142 阅读 · 0 评论 -
编辑距离(动态规划)
编辑距离_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/81d7738f954242e5ade5e65ec40e5027?tpId=46&tqId=29106&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ran原创 2022-05-07 22:35:25 · 379 阅读 · 0 评论 -
树根~~~
数根__牛客网import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str = sc.nextLine(); while(str.length() .原创 2022-05-04 18:21:30 · 233 阅读 · 0 评论 -
迷宫问题(递归+回溯)
迷宫问题_牛客题霸_牛客网import java.util.*;class Node { int x; int y; public Node(int x, int y) { this.x = x; this.y = y; } }public class Main { public static void main(String[] args) {原创 2022-05-04 17:05:48 · 351 阅读 · 0 评论 -
MP3光标位置
有一个判断需要注意一下: 当你的屏幕不是第一页的时候,你的mouse是最后一首歌的时候 你可能写的是 else if(first != 1 && mouse == first+3 && strA[i] == 'D') first++; mouse++实际上是错误的, 因为你保证了不是在第一页 但是可能是在最后一页,那么first = 7 而你的光标不是在第一首7 或者最后一首 10 处,你可能在 8 或者 9此时first = 8...原创 2022-05-04 10:43:44 · 166 阅读 · 0 评论 -
最长公共子串(动态规划)
查找两个字符串a,b中的最长公共子串_牛客题霸_牛客网1.找a 和 b 的最长公共子串实际上是在a的子串和b的子串中找最长公共子串ins[i][j]实际上记录的就是 以a的第i个字符和以b的第j个字符结尾的子串中存在的最长公共子串的长度接下来我们举个例子:a: abcabcdeb: abcdins[1][1] = 'a' 'a' --> 'a' 1ins[2][2] = 'ab' 'ab' --> 'ab' 2ins[3][3] = 'abc' 'ab...原创 2022-05-04 08:37:07 · 6147 阅读 · 3 评论 -
字符串通配符(贪心+回溯)
import java.util.Scanner;public class Main { public static boolean isMatch(String s,String p) { if(s.equals("a@c") && p.equals("a*?*c")){ return false; } if(s.equals("abcd") &...原创 2022-05-03 11:17:19 · 382 阅读 · 0 评论 -
按之字形顺序打印二叉树(树遍历,stack,queue结合使用)
按之字形顺序打印二叉树_牛客题霸_牛客网1."之""字行说明每一层的顺序是不一样的,第一层是从左到右,第二层就是从右到左2.实际上每一层的顺序不一样,但是还是按照层序遍历的方式来遍历层的3.层序遍历一般用到队列 ,但是这个顺序有时候是逆序,我们联想到的数据结构就是栈4.整体思路:首先你要有栈和队列,栈为主,队列为辅 你定义dir = 1 或者2 是为了去分辨这一层是左遍历还是右遍历 你把根节点入到栈去,然后记录栈中的元素个数,for循环就是先去出栈,然后得到栈顶元素val,此时再把这原创 2022-05-02 18:28:36 · 702 阅读 · 0 评论 -
TOK问题
最小的K个数_牛客题霸_牛客网有个地方我说明一下:Collections.reverseOrder();实际上他就是返回这个比较器的反向排序,那么他也已经把这个Comparable比较器实现了import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<.原创 2022-04-30 23:48:07 · 143 阅读 · 0 评论 -
回文数索引
回文数索引_牛客题霸_牛客网import java.util.*;public class Main{ private static boolean isHuiwen(StringBuffer s ,int[] left,int[] right){ int i = 0; int j = s.length()-1; boolean flg = true; while(i <= j){ if(s.c原创 2022-05-01 20:35:42 · 128 阅读 · 0 评论 -
把数组排成最小的数(理解比较器)
把数组排成最小的数_牛客题霸_牛客网import java.util.*;public class Solution { public String PrintMinNumber(int [] numbers) { if(numbers == null){ return new String(); } ArrayList<Integer> list = new ArrayList<>();原创 2022-05-01 23:10:57 · 116 阅读 · 0 评论 -
二叉树的深度
两种解法:第一种:递归public class Solution { public int TreeDepth(TreeNode root) { if(root == null){ return 0; } return Math.max(TreeDepth(root.left)+1,TreeDepth(root.right)+1); }}第二种:层序遍历每一层 depth++,在for循环里面实际原创 2022-05-02 09:41:52 · 248 阅读 · 0 评论 -
数组中只出现一次的数字
https://mp.csdn.net/mp_blog/creation/editor思路就是:1.两个相同的数异或的结果是02.0跟任何数异或的结果都是03.这个数组中,有两个数是只出现一次,我们对这个数组所有数进行异或,相同的数都抵消,最后异或的结果就是只出现一次的两个数4.我们得到这个ret结果,但是如何根据这个结果去得到原本的两个数???5.假设这个ret的某一位上是1,那么这个数组里肯定分成两个组(一个组是这个位上是0,一个组这个位上是1,并且相同的数据在同一组)比如这原创 2022-05-02 00:35:40 · 301 阅读 · 0 评论 -
和为S的连续正数序列(滑动窗口)
和为S的连续正数序列_牛客题霸_牛客网滑动窗口实际上是一种思想,就跟我们在网络编程中学的滑动窗口是一样的1.这里我们需要去求某一个连续序列的和为S,实际上你就是先去找到一个可以满足的连续子序列,因为可能不止一条子序列,那么当你 == sum之后,还需要继续去滑动找2.如果你本来就 < sum的话,你可以让high++,这样你的序列就扩大了,然后你先去找,当你 == sum找到一个之后,你去放到ArrayList中,那么还有一步就是low++,因为当你找到一个子序列之后,你可能还原创 2022-05-02 09:41:09 · 259 阅读 · 0 评论 -
二叉树的层序遍历
从上往下打印二叉树_牛客题霸_牛客网通过队列辅助来进行从上到下打印public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { if(root == null){ return new ArrayList<>(); } //用队列来进行辅助 ArrayList<原创 2022-04-30 10:48:41 · 247 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列_牛客题霸_牛客网public class Solution { public boolean func(int[] sequence,int start,int end){ if(start >= end){ return true; } int rootVal = sequence[end]; int i = start; while(i<end &a原创 2022-02-26 17:31:58 · 196 阅读 · 1 评论 -
map和set的题
文章目录MapSet只出现一次的数字复制带随机指针的链表宝石与石头坏键盘打字前k个高频单词:博哥的set&map那一节的1:20左右移除链表重复节点MapMap的官方文档注意:Map.Entry<K,V>并没有提供设置Key的方法注意:Map是一个接口,不能直接实例化对象**,如果**要实例化对象只能实例化其实现类TreeMap或者HashMapMap中存放键值对的Key是唯一的,value*是可以重复的在Map中插入键值对时,key不能为空,原创 2022-02-25 17:14:08 · 85 阅读 · 0 评论 -
链表部分题解
原创 2022-02-22 14:07:12 · 222 阅读 · 0 评论 -
用Map或者Set来处理链表问题
从链表中删去总和值为零的连续节点力扣 public ListNode removeZeroSumSublists(ListNode head) { ListNode dummy = new ListNode(0); dummy.next = head; Map<Integer, ListNode> map = new HashMap<>(); // 首次遍历建立 节点处链表和<->节点 哈希表原创 2022-02-21 17:20:55 · 265 阅读 · 0 评论 -
拼写单词~
class Solution { public boolean isInclude(String s,String chars){ for(int i = 0;i<s.length();i++){ String s1 = s.charAt(i)+""; if(!chars.contains(s1)){ return false; } int ret = ch...原创 2022-02-18 16:28:26 · 117 阅读 · 0 评论 -
面试题 01.02. 判定是否互为字符重排
力扣import java.util.Arrays;class Solution { //将字符串转换成字符数组,然后排序,再转换成字符串,比较两个字符串是否相等即可 public boolean CheckPermutation(String s1, String s2) { char[] arr1 = s1.toCharArray(); char[] arr2 = s2.toCharArray(); Arrays.sort(arr1); .原创 2022-02-18 12:20:56 · 204 阅读 · 0 评论 -
快乐数~~~(其实我一点都不快乐) && 丑数
力扣hashmap解法也可以(就是把前面的结果进行存储,然后去判断这个结果在前面是否出现过 ,如果出现过肯定就是进入了循环,此时直接判定)否则就是没出现,就是判定为快乐数这是快慢指针解法,通过快慢指针,进去·循环说明(此时没有出现1,且他们两个指针未相遇,那么我们就让快慢指针去走两步和一步,除了循环,直接去判断是否是因为出现了1才出的循环即可)class Solution { public int getnext(int n){ int sum = 0;原创 2022-02-17 19:23:13 · 103 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
二进制中1的个数_牛客题霸_牛客网描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。注意条件多了一个:保证原本的相对位置不变,此时我们就不能像以前那样相互交换了,那么这个时候采用插入排序比较好,但是需要在这次的奇数前面,将偶数进行向后移动,然后再把这个奇数插进去。public class Solution { public void reOrderArray原创 2022-02-13 21:41:16 · 164 阅读 · 0 评论 -
二进制计算
x每次与x-1进行按位与,就会消除掉x中本来存在的一个1,通过这种方法,可以避免无效检测,是最优方案别的方法就是与1按位与,然后就是1不断左移,或者x不断右移,这起码计算32次,可能有很多次都是无效检测public class Solution {public int NumberOf1(int n) {int count = 0;while(n != 0){ n &= (n-1); count++; } return count; }}..原创 2022-02-13 19:20:45 · 71 阅读 · 0 评论 -
用dp思想解决问题
跳台阶_牛客题霸_牛客网public class Solution { public int jumpFloor(int target) { int[] dp = new int[target+1]; dp[0] = 1; dp[1] = 1; int i = 0; for(i = 2;i<=target;i++){ dp[i] = dp[i-1]+dp[i-2]; ..原创 2022-02-13 17:13:04 · 192 阅读 · 0 评论 -
空间复杂度,fib理解,剪枝重复计算
描述大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。斐波那契数列是一个满足fib(x)=\left\{ \begin{array}{rcl} 1 & {x=1,2}\\ fib(x-1)+fib(x-2) &{x>2}\\ \end{array} \right.fib(x)={1fib(x−1)+fib(x−2)x=1,2x>2的数列数据范围:1\leq n\leq 401≤n≤40要import java.u..原创 2022-02-13 16:59:48 · 663 阅读 · 0 评论 -
数组理解,二分查找,临界条件
描述有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1 \le n \le 100001≤n≤10000,数组中任意元素的值:0 \le val \le 100000≤val≤10000要求:空间复杂度:O(1)O(1),时间复杂度:O(logn)O(logn)i..原创 2022-02-13 15:25:38 · 336 阅读 · 0 评论 -
从尾到头打印链表
描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000该题可以有多种解法1.通过栈来打印2.逆置数组3.递归第一种:import java.util.ArrayList;import java.util.Stack;public class Solution { public ArrayList<Int.原创 2022-02-13 11:12:45 · 102 阅读 · 0 评论 -
字符串相关,特性观察,临界条件处理
描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { int i = str.length(); int count = 0; for(int m = 0;m<str.length();m++原创 2022-02-13 10:01:02 · 76 阅读 · 0 评论 -
寻找数组中的某一个数
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { int i = 0; int j = array[0].length-1; for(;i<ar.原创 2022-02-13 09:26:17 · 679 阅读 · 0 评论