算法
single-life
身在井隅,心向星光。
展开
-
算法-只出现一次的数字集合
算法-只出现一次数字的集合原创 2023-12-14 14:51:31 · 136 阅读 · 0 评论 -
算法--设计lru算法
LRU原创 2023-03-21 21:14:23 · 104 阅读 · 0 评论 -
算法-求两个字符串的子串和子序列
求两个字符串的子串和子序列原创 2023-03-12 09:43:32 · 153 阅读 · 0 评论 -
算法--3数之和
3数之和原创 2023-03-06 19:20:22 · 84 阅读 · 0 评论 -
左(7)--kmp,manacher,morris
kmp,manacher,morris原创 2022-12-07 20:02:41 · 433 阅读 · 0 评论 -
左程云老师算法课笔记(五)
笔记原创 2022-11-25 14:45:15 · 210 阅读 · 0 评论 -
推土机(快排)荷兰国旗思路
荷兰国旗(快排思路)原创 2022-07-17 10:17:58 · 83 阅读 · 0 评论 -
约瑟夫问题(环)解题思路
约瑟夫环原创 2022-07-08 16:28:22 · 498 阅读 · 0 评论 -
记录一下kmp
kmp原创 2022-06-18 09:44:20 · 92 阅读 · 0 评论 -
算法--调整数组顺序使奇数位于偶数前面
算法--调整数组顺序使奇数位于偶数前面原创 2022-06-11 08:51:13 · 300 阅读 · 0 评论 -
算法--剪绳子
算法--剪绳子原创 2022-06-04 08:20:51 · 189 阅读 · 0 评论 -
圆圈中最后剩下的数
前言仅记录学习笔记,如有错误欢迎指正。题目每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中,有个游戏是这样的:首先,让 n 个小朋友们围成一个大圈,小朋友们的编号是0~n-1。然后,随机指定一个数 m ,让编号为0的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0… m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客礼品,请你试着想下,哪个小朋友会得到这份礼品呢原创 2022-05-29 09:22:12 · 78 阅读 · 0 评论 -
和为S的两个数字
前言仅记录学习笔记,如有错误欢迎指正。题目输入一个升序数组 array 和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可示例:输入:[1,2,4,7,11,15],15输出: [4,11]输入:[1,5,11],10输出: []解法有序数据应该要想到双指针!import java.util.ArrayList;public class Solution {原创 2022-05-20 12:11:29 · 64 阅读 · 0 评论 -
和为S的连续正数序列
前言仅记录学习笔记,如有错误欢迎指正。题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?数据范围:0 < n \le 1000<n≤100进阶:时间复杂度 O(n)O(n)示例:输入:9输出: [原创 2022-05-15 10:06:06 · 87 阅读 · 0 评论 -
把数组排成最小的数
前言仅记录学习笔记,如有错误欢迎指正。题目输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。1.输出结果可能非常大,所以你需要返回一个字符串而不是整数2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0数据范围:0<=len(numbers)<=100示例:输入:[11,3]输出: “113”输入:[3,3原创 2022-05-11 15:16:46 · 66 阅读 · 0 评论 -
扑克牌顺子
前言仅记录学习笔记,如有错误欢迎指正。题目现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:1. A为1,J为11,Q为12,K为13,A不能视为142. 大、小王为 0,0可以看作任意牌3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]要求:空间复杂度 O(1)O(1),时间复杂度 O(nlogn)O(nlogn),本题也有时间复杂度原创 2022-05-01 10:04:18 · 313 阅读 · 0 评论 -
求1+2+3+...+n
前言仅记录学习笔记,如有错误欢迎指正。题目求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。数据范围: 0 < n \le 2000<n≤200进阶: 空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)示例:输入:5输出: 15解法在函数中,如果与运算成立,则继续,否则终止函数直接返回false。public class Solution { pub原创 2022-04-30 10:05:16 · 286 阅读 · 0 评论 -
算法(55)--出现一次的数字
前言仅记录学习笔记,如有错误欢迎指正。题目一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。数据范围:数组长度 2\le n \le 10002≤n≤1000,数组中每个数的大小 0 < val \le 10000000<val≤1000000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)提示:输出时按非降序排列示例:输入:[1,4,1,6]输出: [4,6]说明:返回的结果中较小的数排在前面原创 2022-04-23 09:37:28 · 173 阅读 · 0 评论 -
算法(53)-- 矩阵中的路径
前言仅记录学习笔记,如有错误欢迎指正。题目请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。示例:输入:"[[a,b,c,原创 2022-03-26 10:39:02 · 321 阅读 · 0 评论 -
算法(54)-- 数据流中的中位数
前言仅记录学习笔记,如有错误欢迎指正。题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。示例:输入:[5,2,3,4,1,6,7,0,8]输出: "5.00 3.50 3.00 3.50 3.00 3.50 4.00 3.50 4.00 "说明:原创 2022-04-09 09:38:29 · 134 阅读 · 0 评论 -
算法(51)-- 礼物的最大价值
前言仅记录学习笔记,如有错误欢迎指正。题目在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?如输入这样的一个二维数组,[[1,3,1],[1,5,1],[4,2,1]]那么路径 1→3→5→2→1 可以拿到最多价值的礼物,价值为12示例:输入:[[1,3,1],[1,5,1],[4,2,1原创 2022-03-12 09:31:38 · 169 阅读 · 0 评论 -
算法(50)--连续子数组的最大和(二)
前言仅记录学习笔记,如有错误欢迎指正。题目输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,找到一个具有最大和的连续子数组。1.子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组2.如果存在多个最大和的连续子数组,那么返回其中**长度最长**的,该题数据保证这个最长的只存在一个3.该题定义的子数组的最小长度为1,不存在为空的子数组,即不存在[]是某个数组的子数组4.返回的数组不计入空间复杂度计算示例原创 2022-02-26 10:36:27 · 553 阅读 · 0 评论 -
算法(49)--二维数组中的查找
前言仅记录学习笔记,如有错误欢迎指正。题目在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。示例:输入:7,[[1,2,8,9],[2,4,9,1原创 2022-02-19 10:11:00 · 75 阅读 · 0 评论 -
算法(48)--数字在升序数组中出现的次数
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数要求:空间复杂度 O(1),时间复杂度 O(logn)示例:输入:[1,2,3,3,3,3,4,5],3输出: 4解法有序要想到二分查找!2022加油~public class Solution { public int GetNumberOfK(int [] array , int k) { //看见有序,肯定就是二分查原创 2022-02-13 09:40:50 · 295 阅读 · 0 评论 -
算法(47)--翻转单词序列
前言仅记录学习笔记,如有错误欢迎指正。题目快过年啦~~翻转单词示例:输入:“nowcoder. a am I”输出: “I am a nowcoder.”解法暴力解法public class Solution { public String ReverseSentence(String str) { String[] s = str.split(" "); StringBuilder sb = new StringBuilder();原创 2022-01-19 09:37:15 · 91 阅读 · 0 评论 -
算法(46)--二叉搜索树的最近公共祖先
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。.1.对于该题的最近的公共祖先定义:对于有根树T的两个结点p、q,最近公共祖先LCA(T,p,q)表示一个结点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.2.二叉搜索树是若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值.3.所有节点的值都是唯一的。.4.p、q 为不同节点且均存在原创 2022-01-08 09:35:44 · 272 阅读 · 0 评论 -
算法(45)-- 在二叉树中找到两个节点的最近公共祖先
前言仅记录学习笔记,如有错误欢迎指正。题目给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。数据范围:1 \le n \le 10001≤n≤1000,树上每个节点的val满足 0<val \le 1000<val≤100要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)注:本题保证二叉树中每个节点的val值均不相同。如当输入[3,5,1,6,2,0,8,#,#,7,4],5,1时,二叉树{3原创 2022-01-02 10:11:37 · 446 阅读 · 0 评论 -
算法(44)--二叉树中和为某一值的路径(三)
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点2.总节点数目为n3.保证最后返回的路径个数在整形范围内示例输入:{1,2,3,4,5,4,3,#,#,-1},6输出: 3解法一dfspublic int FindPath (TreeNode root, int sum) { //原创 2021-12-26 09:08:01 · 180 阅读 · 0 评论 -
算法(43)--把二叉树打印成多行
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]示例输入:{1,2,3,#,#,4,5}输出: [[1],[2,3],[4,5]]解法学习递归的思路 为什么这样子递归呢import java.util.Arr原创 2021-12-18 10:16:17 · 374 阅读 · 0 评论 -
算法(42)--二叉树的下一个结点
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。示例输入:{8,6,10,5,7,9,11},8输出: 9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9,如下图,其实都有指向左右孩子的指针,还有指向父节点的指针,下图原创 2021-12-12 09:58:04 · 131 阅读 · 0 评论 -
算法(40)--按之字形顺序打印二叉树
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)示例输入:{1,2,3,#,#,4,5}输出: [[1],[3,2],[4,5]]解法层次遍历的思路import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; pu原创 2021-11-20 10:10:08 · 483 阅读 · 0 评论 -
算法(39)--链表删除重复节点
前言仅记录学习笔记,如有错误欢迎指正。题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5示例输入: {1,2,3,3,4,4,5}输出: {1,2,5}解法思路清晰 找好关系/* public class ListNode { int val; ListNode next = null;原创 2021-11-14 09:42:31 · 288 阅读 · 0 评论 -
算法(38)--两个链表的第一个公共结点
前言仅记录学习笔记,如有错误欢迎指正。题目输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。示例输入: {1,2,3,6,7},{2,3,4,6,7}输出: 6解法找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走(因为2个链表用公共的尾部)int m = 0; int n = 0; ListNode p1 = pHead1; ListNode p2 = pHead2; if(p原创 2021-10-30 09:05:26 · 84 阅读 · 0 评论 -
算法(37)--判断平衡二叉树
前言仅记录学习笔记,如有错误欢迎指正。题目输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。示例输入: {1,2,3,4,5,6,7}输出: true解法国庆快乐!要思考怎么吧递归和子方法写出来!~public class Solution {原创 2021-10-01 08:50:58 · 164 阅读 · 0 评论 -
算法(36)--整数中1出现的次数(从1到n整数中1出现的次数)
前言仅记录学习笔记,如有错误欢迎指正。题目输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次示例输入: 13输出: 6解法一暴力循坏public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int res = 0; for(int i =1;i<=n;i++){原创 2021-09-25 08:27:48 · 96 阅读 · 0 评论 -
算法(35)--返回最小k个数
前言仅记录学习笔记,如有错误欢迎指正。题目给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。示例输入: [4,5,1,6,2,7,3,8],4输出: [1,2,3,4]解法题目不难,但是可以学习到一个新的数据结构,优先队列,内部自动排序,由堆实现!import java.util.ArrayList;import java.util.*;public class Solution { p原创 2021-08-21 09:16:41 · 118 阅读 · 0 评论 -
算法(34)-- 字符串的排列
前言仅记录学习笔记,如有错误欢迎指正。题目输入一个字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。示例输入: str= “ab”输出:[“ab”,“ba”]输入: str= “abc”输出: [“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]解法坚持就是胜利!public class原创 2021-08-15 10:02:26 · 100 阅读 · 0 评论 -
算法(33)--二叉搜索树变为双向链表
前言仅记录学习笔记,如有错误欢迎指正。题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示示例输入: {10,6,14,4,8,12,16}输出:4,6,8,10,12,14解法最近有点忙呀~/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {原创 2021-08-08 09:05:33 · 62 阅读 · 0 评论 -
算法(32)-- 二叉树中和为某一值的路径(dfs)
前言仅记录学习笔记,如有错误欢迎指正。题目全排列(给定一个没有重复数字的序列,返回其所有可能的全排列。)示例输入: nums = [1,2,3]输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解法 public List<List<Integer>> permute(int[] num){ List<List<Integer>> res = ne原创 2021-08-01 09:07:26 · 71 阅读 · 0 评论 -
算法(30)--打印二叉树的节点
前言仅记录学习笔记,如有错误欢迎指正。题目从上往下打印二叉树示例输入: {5,4,#,3,#,2,#,1}输出: [5,4,3,2,1]解法利用主函数保存根节点就水到渠成了。(善于利用辅助函数去做事)public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<>();原创 2021-07-30 14:15:52 · 214 阅读 · 0 评论