
2022--magic
文章平均质量分 54
南郭竽
这个作者很懒,什么都没留下…
展开
-
数值区间的模糊匹配,二分查找的应用
比如 不应该是 [0, 1500, 5] 这样去二分,而应该是 [0, 300, 1] 这样去二分。如果说弄一个 list 之类的容器去记录 x 的区间,这样似乎就失去了计算的意义,跟直接 switch case 也没什么区别了。思考 666 分钟之后,发现这个很难计算,虽然规律是显而易见的,但是,一个任意的 x ,又怎么去匹配到对应的行呢,似乎有点困难。于是决定换个思路,从 y 下手,因为 y 的值更少,而且规律更显而易见。需求很明确,要根据左边的值,显示右边的值。那么,根据规律 2 ,也就是说。原创 2023-04-13 23:05:33 · 936 阅读 · 1 评论 -
c++ 中的函数参数的值传递
首先函数的调用栈是 main() -> grade() -> median() . 函数实参是在main() 里面创建的。写 c++ 程序的时候要特别小心这种函数参数的传递。稍不注意就会出现问题。函数的时候,这里传入的是一个常量引用,所以这里不会去创建对象,并且保证。,所以这里会进行一个拷贝赋值,也就是创建了一个新的对象。下面看一段代码并思考,为什么这里的。里面去进行排序,不会影响到原来的。原创 2023-01-12 05:17:46 · 303 阅读 · 0 评论 -
kex_exchange_identification: Connection closed by remote host
baidu/google/stackoverflow 查找了一大圈没解决。后面发现是 全局代理导致的,关闭全局代理就能正常执行了。当前环境:Windows 11 & git bash。全局代理对 github / gitee 都生效。之前一直是正常的,然后突然就提示这个错误了。原创 2022-10-24 09:02:32 · 1607 阅读 · 1 评论 -
java 基数排序实现
不同于 希尔排序。快速排序这些,基数排序的思想更容易理解,代码也更容易实现。但是基数排序的缺点也很明显,对于小数的处理,需要一些额外的操作。可以给全部元素进行扩大化处理,但是要考虑大数的溢出问题。…以下是对基数排序的介绍:基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。它是这样实现的:将所有待比较数值(正整数)统一为同样原创 2022-05-05 19:40:24 · 591 阅读 · 0 评论 -
Java 归并排序
归并排序,有递归实现与迭代实现两种方式,这里给出递归实现的方案。归并排序的含义是把两个有序的序列合并成一个有序的序列。具体做法更简单:(这里假设两个有序序列均是从小到大排列的)首先是创建一个空序列,长度为 这两个序列的长度之和;然后是从前向后遍历这两个序列的值,取出每次比较的较小值存放进这个新序列中,然后一直往后更新索引值,直到其中一个序列的全部元素放入到新序列中;然后把另一个序列中剩余的值,直接全部添加到这个新的序列的末尾经过上面3步,就完成了归并排序。而如果当前是一个无序的队列,怎原创 2022-05-03 20:58:08 · 1241 阅读 · 0 评论 -
Java 快速排序实现
快速排序定义:快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序{\displaystyle n}n个项目要{\displaystyle \ O(n\log n)}{\displaystyle \ O(n\log n)}(大O符号)次比较。在最坏状况下则需要{\displaystyle O(n^{2})}{\displaystyle O(n^{2})}次比较,但这种状况并不常见。事实上原创 2022-05-02 22:50:07 · 203 阅读 · 0 评论 -
java 插入排序及希尔排序
看一下这两种排序的算法。插入排序,其大致实现如下: /** * 插入排序; * <pre> * 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。 * 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上, * 通常采用in-place排序(即只需用到{\displaystyle O(1)}{\displaystyle O(1)原创 2022-05-01 18:27:19 · 524 阅读 · 0 评论 -
Java 八皇后问题求解-递归/回溯
问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。来源:八皇后问题此问题的求解其实是利用递归来处理的。大体思路如下:依次摆放每个皇后(后面以棋子代替皇后字样),因为不能是同一行,同一列,同一斜线,所以,至少可以原创 2022-04-24 20:38:28 · 345 阅读 · 0 评论 -
java 栈的应用 - 实现带括号的加减乘除计算器
上篇说了怎么实现一个不带括号的表达式求值方法,由于现在的带了括号了,之前的方法就不适用了。上篇对应地址:java 栈的应用 - 实现简单的加减乘除的计算器这里主要是分两步:将给定的输入转成后缀表达式;根据后缀表达式进行运算;先看转后缀表达式的代码:import java.util.Stack;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 中缀表达式转后缀表达式 */public cla原创 2022-04-18 19:44:35 · 1815 阅读 · 1 评论 -
java 栈的应用 - 实现简单的加减乘除的计算器
对于一个简单的加减乘除表达式,怎么去计算其结果呢? 比如 21 + 3 - 5 * 0。|不包含 (,)|这里使用的实现思路是:准备两个栈,分别用于存放 数字和 操作符。(为了便于后续表达,分别命名为numStack, opStack);然后就是遍历这个字符串,从前往后的提取里面的数字和符号,进行下一步的操作:如果提取到的是数字,直接存入numStack;如果提取到的是符号,就先判断符号栈是否为空:如果是空的,直接存入到opStack;如果符号栈不是空,就比较符号栈的栈顶元素与当前符号的原创 2022-04-16 22:40:16 · 1321 阅读 · 0 评论 -
Java 栈的实现-使用链表
使用链表实现栈比实现一个单链表要简单很多。可以只在链表头进行数据的存取。下面给出实现:import java.util.StringJoiner;class LinkedStack<Z> { private static class Node<R> { R data; Node<R> next; } private final int capacity; private final Node<原创 2022-04-16 14:27:26 · 1076 阅读 · 0 评论 -
java 栈的实现-使用数组封装
栈是一种后进先出的数据结构,只有一个方向可以进行数据的存取。基于此,可以很容易的使用数组进行实现。下面给出具体实现:import java.util.StringJoiner;class ArrayStack<Z> { private final int capacity; private final Object[] array; private int topPos = -1; public ArrayStack(int capacity) {原创 2022-04-16 14:21:44 · 718 阅读 · 0 评论 -
java 环形单链表实现及约瑟夫问题求解
环形单链表其实跟普通单链表和相识,只是最后一个元素会指向第一个元素;而普通的单链表最后的一个元素只是指向 null.不过在实现的时候需要注意一下这个环形链表的遍历的退出条件,以及在插入与删除元素的时候,怎么去操作其中的节点。(与普通单链表会存在细微差别。)然后,简单介绍一下约瑟夫问题:问题描述约瑟夫环问题(Joseph)又称丢手绢问题:已知 m 个人围坐成一圈,由某人起头,下一个人开始从 1 递增报数,报到数字 n 的那个人出列,他的下一个人又从 1 开始报数,数到 n 的那个人又出列;依此规律重原创 2022-04-15 17:28:21 · 601 阅读 · 0 评论 -
java 双向链表的实现 及反转双向链表
双向链表,顾名思义,就是每个节点都有两个指针,分别指向当前节点的前一个节点及后一个节点。下面给出具体实现:import java.util.StringJoiner;class LinkedList<Z> { private static class Node<Z> { Z data; Node<Z> next; Node<Z> prev; } private final N原创 2022-04-11 19:58:18 · 2301 阅读 · 0 评论 -
java 单链表实现 及 反转单链表
单链表的概念很容易理解,就是单向链表的意思。下面直接给出实现:import java.util.Arrays;import java.util.Random;import java.util.StringJoiner;/** * 单链表的实现. */public class LinkedList<Z extends Comparable<Z>> { private static class Node<K> { K data;原创 2022-04-11 12:37:52 · 616 阅读 · 0 评论 -
Java 数组实现队列
队列,一种比较直观的数据结构,遵循先进先出的原则。更具体的就不展开介绍了,这里给出一个简单的实现。环形队列import java.util.Arrays;import java.util.StringJoiner;public class ArrayCycleQueue<Z> { private int front; // index of the first element's index; private int rear; // index of the l原创 2022-04-09 00:27:29 · 1484 阅读 · 0 评论 -
稀疏数组 与二维数组的转化映射
稀疏数组 (针对二维数组的优化方案)用途:用于减少内存占用/序列化时的传输数据的大小等;定义方式:1. 永远是 3列2. sparse[0][0]==origin.length;sparse[0][1]==origin[0].length;3. 后续的 sparse[row][0]==valueRow;sparse[row][1]= valueCol ;sparse[row][2] == value;其中,[row]从1开始递增。关于稀疏数组的介绍就这些吧,下面是代码实现:public原创 2022-04-07 16:40:25 · 403 阅读 · 0 评论