算法
带着希望活下去
这个作者很懒,什么都没留下…
展开
-
约瑟夫环初识
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出圈;他的下一个人又从 1 开始报数,数到 m 的那个人又出圈;依此规律重复下去,直到剩余最后一个胜利者。例如:有10个人围成一圈进行此游戏,每个人编号为 1-10 。若规定数到 3 的人出圈。则游戏过程如下。(1)开始报数,第一个数到 3 的人为 3 号,3 号出圈。 1, 2, 【3】, 4, 5, 6, 7, 8, 9, 10。(2)原创 2022-01-06 17:47:23 · 166 阅读 · 0 评论 -
刷题----各种算法的总结
常见算法总结:回溯算法解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做...原创 2021-12-10 11:07:14 · 165 阅读 · 0 评论 -
队列和栈的实现
队列实现队列,我们可以使用动态数组和指向队列头部的索引。队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。// "static void main" must be defined in a public class.class MyQueue { // store elements private List<Integer> data; // a pointer to原创 2021-11-16 15:33:13 · 367 阅读 · 0 评论 -
算法-图解单链表反转
参考链接图解单链表原创 2021-11-16 13:05:50 · 241 阅读 · 0 评论 -
算法--公交车幸运数字
题目:大概内容是 一个六位数的幸运数字 前三位和和后三位和相等,就认为是幸运数字;求输入一个数字之后,求出下一个幸运数字。例如:555555 的下一个幸运数字为 555564public class LuckNumber { public static void main(String[] args) { //输入一个幸运号 Scanner sc = new Scanner(System.in); int s = sc.next.原创 2021-10-31 23:05:34 · 262 阅读 · 0 评论 -
算法--双指针的用法
1.环形链表public boolean hasCycle(ListNode head) { //快慢指针 ListNode fast , slow; fast = slow = head; while(fast != null && fast.next != null){ fast = fast.next.next; slow = slow.next;原创 2021-10-25 15:19:22 · 73 阅读 · 0 评论 -
算法---TOPK问题
leetcode topk问题:给一非空的单词列表,返回前k个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。自己刚开始直接进行操作使用的是大根堆:复杂度有点高class Solution { public List<String> topKFrequent(String[] words, int k) { //直接Map添加 A掉啊。。。 Map<Str..原创 2021-10-11 22:09:41 · 56 阅读 · 0 评论 -
算法-求有效山峰easy
算法leetcode149 easy 有效山峰:class Solution { public boolean validMountainArray(int[] arr) { if(arr.length < 3) return false; //判断是否为山峰 //只要存在 i<i+1 就ok //标识起来只要存在 flag1 上升 flag2 下降就 ok int n = arr.length;原创 2021-10-11 21:10:47 · 142 阅读 · 0 评论 -
算法--最长公共前缀
public class Main { public static String replaceSpace(String[] strs) { // 如果检查值不合法及就返回空串 if (!checkStrs(strs)) { return ""; } // 数组⻓度 int len = strs.length; // ⽤于保存结果 StringBuilder res = new StringBuilder(); // 给字符串数组的元素按照升序排序(包含数字的话,数字会排在前⾯) A.原创 2021-10-10 15:58:45 · 86 阅读 · 0 评论 -
最小覆盖子字符串
leetcode的最小覆盖子字符串package com.lzh.leetcode.slidwindow;import cn.hutool.core.util.ArrayUtil;import org.junit.Test;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;/** * @Author Jerry * @Date 2021/7.原创 2021-10-09 17:40:12 · 61 阅读 · 0 评论 -
完全二叉树----平衡二叉树---AVL树的学习
完全二叉树的定义若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。(1)所有的叶结点都出现在第k层或k-l层(层次最大的两层)(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l。简单的说就是:二叉树的的叶子节点右子树原创 2021-08-18 15:31:38 · 1842 阅读 · 0 评论 -
算法--二分查找
简单的二分查找leetcode:简单二分查找public int search(int[] nums, int target) { //数字不重复 //左边界 int left = 0; //右边界 int right = nums.length - 1; while (left <= right) { //中点位置 int mid = left +原创 2021-07-30 17:24:17 · 119 阅读 · 0 评论 -
二分法和分治法概念区别--记录
1.二分法和分治法的概念区别: 二分搜索每次都要舍弃一半,从留下的一半中寻找目标;而分治法把一个大问题分成两个或多个小问题,递归地求这些小问题的解,最后再把它们小心谨慎的合并起来,并且要仔细考虑合并时产生的新的情况。这当然没有错,但你也马上会从这里意识到两者的巨大联系。就拿选取数组中第k个最小的数的算法来说,有一个版本便是从快速排序中修改而来:划分后,舍弃掉不存在的区间,对剩余部分迭代(后文将进行讲解),而快速排序是分治法的典型代表。...原创 2020-12-24 10:16:45 · 3356 阅读 · 0 评论 -
轮盘选择算法--实例
参考的链接: 参考算法基本思想如上图所示的抽奖转盘,我们直观的认为“四等奖”的中奖概率最大,因为它占的面积最多,这也体现了轮盘赌算法最朴素的一个思想:被选中的概率与个体在总体中所占比例成正比。假设我们不是用“一等奖”或“二等奖”这种定性的指标描述,而是给每个个体 [公式] 一个适应度值 [公式] ,则使用轮盘赌算法选择该个体的流程为:计算适应度比例,即每个个体的选择概率2.计算每个个体的累积概率,相当于转盘上的“跨度”,“跨度”越大越容易选到即每个个体之前所有个体的选择概率之和,相当于概率转载 2020-12-23 09:58:14 · 4974 阅读 · 0 评论 -
java 中的位运算操作
1、>>:右移运算符bai,num >> 1,相当于num除以2。du按二进制形式把所有zhi的数dao字向右移动对应位数,低位移zhuan出shu(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。如:-1在32位二进制中表示为:11111111 11111111 11111111 11111111,-1>>1:按位右移,符号位不变,仍旧得到11111111 11111111 11111111 11111111,因此值仍为-12、>>>原创 2020-12-17 09:06:15 · 216 阅读 · 0 评论 -
LSM树和B+树的区别--mark
LSM树和B+树比较参考 LSM和B+树比较原创 2020-10-21 19:04:14 · 262 阅读 · 0 评论 -
树的概念和知识点---tree
1.Tree introduce1.1 B- B+ B*树参考文章B树2. B-树自己理解:B-树针对多路搜索,主要核心用到的还是二分查找B-树的特性:关键字集合分布在整颗树中;任何一个关键字出现且只出现在一个结点中;搜索有可能在非叶子结点结束;其搜索性能等价于在关键字全集内做一次二分查找;自动层次控制;3. B+树场景:B+ 树通常用于数据库和操作系统的文件系统中。NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系统都原创 2020-10-20 19:58:21 · 688 阅读 · 0 评论 -
插入排序---算法
插入算法好久没看算法了,真的见题就模糊了—555 今天记录一下吧插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序!!!举个例子:4个数字4,6,7,5进行从大到小的排序。前插排序法具体过程如下:把第一个数4插入到空的有序数组中的第一个位置上,得到新数字序列4;第一趟:从后往前扫描有序数组,将第二个数字6和有序数组中的4进行比较,原创 2020-07-27 21:25:38 · 119 阅读 · 0 评论