算法笔记
文章平均质量分 63
学而不思则忘
一切都可以
展开
-
二分查找算法的几种情况
情况一给定一个有序的数组,查找 value 是否在数组中,不存在返回 -1。转载 2021-01-08 18:36:46 · 456 阅读 · 1 评论 -
递归回溯专题
例如:每次递归都将能走过的点位置2,这样每次退出递归时该次递归寻找的岛屿都是2(同时原来矩阵中数值也变成2),所以最后只需要统计原来矩阵有多少个1开始遍历的次数即可。参考答案:https://leetcode.cn/problems/number-of-islands/solutions/211211/dao-yu-lei-wen-ti-de-tong-yong-jie-fa-dfs-bian-li-/,说明该单元格的结果尚未被计算过,则进行搜索,并将计算得到的结果存入缓存中。个位置(下标从 0 开始)。原创 2023-06-15 12:43:31 · 1030 阅读 · 0 评论 -
二分查找专题
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]原创 2023-06-15 12:42:22 · 369 阅读 · 0 评论 -
LRU缓存算法
我们在使用的时候,可以就把它理解为我们经常接触的数据结构——队列,不过是增加了多线程下的安全性保证罢了。原创 2023-02-19 13:42:37 · 502 阅读 · 0 评论 -
Java使用PriorityQueue建立大小顶堆
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。利用上面这题来做背景。1. 建立大顶堆大顶堆执行poll()去掉的是大数,留下的是小数。构造方法传入(w1, w2) -> w2 - w1 // 第二个参数减第一个是大顶堆import java.util.*;public class Solution { public static void main(String[] args) {.原创 2021-06-09 21:40:51 · 1541 阅读 · 0 评论 -
设计实现LRU
1. 单线程版本使用LinkedHashMap数据结构import java.util.*;public class Solution { /** * lru design * @param operators int整型二维数组 the ops * @param k int整型 the k * @return int整型一维数组 */ public int[] LRU (int[][] operators, int k) {转载 2021-04-06 11:41:57 · 336 阅读 · 0 评论 -
红黑树详解
1. 红黑树的性质性质1:每个节点要么是黑色,要么是红色性质2:根节点是黑色性质3:每个叶子节点(NIL)是黑色性质4:每个红色节点的两个子节点一定都是黑色性质5:任意一个节点到每个叶子节点的路径都包含相同数量的黑色节点从性质5又可以推出:性质5.1:如果一个节点存在黑色子节点,那么该节点一定有两个子节点2. 红黑树的自平衡左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。如图3:右旋:以某转载 2021-04-05 22:33:17 · 337 阅读 · 0 评论 -
设计getMin功能的栈——自写链表实现
题目描述实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。输入:[[1,3],[1,2],[1,1],[3],[2],[3]]输出:[1,2]import java.util.*;public class Solution { /** * return a array which include all ans for op3 * @param op int整型二维数组 operator * @return int整型一维原创 2021-04-02 15:21:42 · 71 阅读 · 0 评论 -
根据二叉树前序和中序结果建立二叉树,并输出右视图
请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图 * @param xianxu int整型一维数组 先序遍历 * @param zhongxu int整型一维数组 中序遍历 * @return int整型一维数组 */.原创 2021-04-02 15:16:50 · 366 阅读 · 0 评论 -
最长递增子序列
题目描述给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)输入[1,2,8,6,4]输出[1,2,4]题解采用贪心+二分,假设数组arr为[1,2,8,6,4],end数组里面存放递增子序列,maxLen数组里存放以元素i结尾的最大递增子序列长度,那么遍历数组arr并执行如下更新规则:初始情况下,end为[1], maxLen为[1]然后遇到2,由于end的最后一个元素小于2,所以直接把2添加到end最后,maxLen也更新,此时:原创 2021-04-01 16:42:51 · 321 阅读 · 0 评论 -
出现次数TOPK问题
题目描述给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印 出次数前k名的字符串。 [要求]如果strArr长度为N,时间复杂度请达到O(N \log K)O(NlogK)输出K行,每行有一个字符串和一个整数(字符串表示)。 你需要按照出现出现次数由大到小输出,若出现次数相同时字符串字典序较小的优先输出解题代码主要看看怎么使用PriorityQueue建立小顶堆。import java.util.*;public class Solution { /*原创 2021-03-17 14:57:01 · 248 阅读 · 0 评论 -
连续子数组的最大和
题目连接LeetCode牛客题霸输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.动态规划解法设一个结果数组res[arr.length]:表示到当前下标元素时,最大累加和。其计算过程为:对于当前元素,如果res[i-1]+arr[i]>=arr[i], 则res[i] =原创 2021-03-17 13:35:42 · 113 阅读 · 0 评论 -
排序算法及其时间复杂度
1. 排序算法时间复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。图片名词解释:n: 数据规模k: “桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额原创 2021-03-16 21:36:21 · 48302 阅读 · 2 评论 -
合并k个已排序的链表——NC.51
题目描述合并 k 个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。[{1,2,3},{4,5,6,7}]{1,2,3,4,5,6,7}解决方法一:遍历链表数组,两两合并链表。其中合并两个有序链表也是一个算法题,点击此处查看。import java.util.*;/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne原创 2021-01-28 15:44:13 · 257 阅读 · 0 评论 -
排序算法汇集
题目描述给定一个数组,请你编写一个函数,返回该数组排序后的形式。快速排序import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @return int整型一维数组 */ public int[] MySort (int[] arr原创 2021-02-03 20:47:09 · 238 阅读 · 0 评论 -
完全背包问题和0-1背包问题简单理解
0-1背包问题:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。完全背包问题:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 可以看出,两种问题的不同是完全背包问题的物品可以无限用,虽...原创 2019-05-12 17:10:30 · 4056 阅读 · 0 评论 -
欧拉函数定义和计算——算法笔记
欧拉函数定义: 在数论中,对正整数n,欧拉函数 是小于或等于n的正整数中与n 互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数(totient function,由西尔维斯特所命名)。例如φ(8)=4,因为1,3,5,7均和8互质。(来自维基百科)欧拉定理: 对于正整数N,代表小于等于N的与N互质的数的个数,记作φ(N). 例如φ(8)=4...原创 2019-05-26 12:36:17 · 3596 阅读 · 0 评论 -
最长递增子序列(LIS)——算法笔记
LIS(Longest Increasing Subsequence)最长上升子序列 : 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。...原创 2019-05-31 15:58:04 · 1320 阅读 · 0 评论 -
秦九韶算法——计算方法
下面,根据上述的公式,写出对应的代码:#include<iostream>using namespace std;#define N 100float qin_jiushao(int n, float a[], float x){ float result = a[n]; for (int i = n; i >= 1; i--) { ...原创 2019-10-05 11:51:39 · 7327 阅读 · 0 评论