于是乎,在丧心病狂的noip2017结束之后,我们很快就要迎来更加丧心病狂的省选了-_-||所以从写完上一篇博客开始到现在我一直深陷数据结构和网络流的漩涡不能自拔今天终于想起来写博客(只是懒吧......) 言归正传。省选级别的数据结构比NOIP要高到不知道哪里去了。noip只考一点线段树啊st表啊并查集啊之类的简单数据结构,而且应用范围很窄但是省选里面对数据结构,尤其是高级数据结构的要求就高了很多,更有一些题目看着就是数据结...
参考:https://leetcode-cn.com/problems/sort-listhttps://blog.csdn.net/Jacketinsysu/article/details/52472364?utm_source=blogkpcl7 148. 排序链表给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]/** * Definition for singly-linked list. * public class ListNode { * ...
经典排序算法 - 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子例子为从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | #include "iostream.h"
main()
{int a[6]={6,2,4,1,5,9};for(int i=0;i<6;i++){for(int j=0;j<6-i;j++){if(a[j]>a[j+1]){int temp=a...
JavaScript常见排序以下两个函数是排序中会用到的通用函数,就不一一写了function checkArray(array) {if (!array || array.length <= 2) return
}
function swap(array, left, right) {let rightValue = array[right]array[right] = array[left]array[left] = rightValue
}View Code冒泡排序冒泡排序的原理如下,从第一个元素开始,把当前元素和下一个索引元素进行比较。如果当前元素大,那么就交换位置,重复操作直到比较到最后一...
算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。为什么把数据结构和算法一起说?
想想罗密欧与朱丽叶,梁山伯和祝英台,少了一个你总会觉得奇怪吧。算法的五个基本特性:输入:有0个或多个输入;输出:有1个或多个输出;有穷性:步骤有限,不能无穷循环下去;确定性:有确定的含义,不能出现二义性;可行性:每一步都能通过有限次数完成。算法设计的要求:正确性:能...
最近在读《数据结构、算法与应用》这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢7. 假定用一维数组a[0 : size-1]来存储一组元素。如果有n个元素,可以把它们存储在a[0],..., a[n-1]中。当n超过si ze时, 数组将不足以存储所有元素 , 必须分配一个更大的数组。类似地...
1)最长不重复子串使用string和vector<string>string FindLongestNonRepeatSubstring(string str)
{if (str.empty()) return"";string tmp;//存放临时不重复的子串vector<string> svec;//存放所有不重复的子串int start = 0;//标记每次开始查找子串的下标int pos = -1; //查找当前字符在子串中的位置下标tmp.push_back(str[0]);for (unsigned int i = 1; i < str.size(); ++i){pos = tmp.find(str[i]);if (pos == -1){tmp.push_bac...
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况下,尽量增大桶的数量
使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中
同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
什么时候最快
当输入的数据可以均匀的分配到每一个桶中。
什么时候最慢
当输入的数据被分配到了同一个桶中...
本文根据《大话数据结构》一书,实现了Java版的二叉排序树/二叉搜索树。二叉排序树介绍在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低;而有序线性表中,可以使用折半、插值、斐波那契等查找方法来实现,但因为要保持有序,其插入和删除操作很耗费时间。二叉排序树(Binary Sort Tree),又称为二叉搜索树,则可以在高效率的查找下,同时保持插入和删除操作也又较高的效率。下图为典型的二叉排序树。二叉查找树具有以下...
数组,都懂的,直接看代码吧,实现以下功能:创建数组查找在索引上的值查找数组中是否含有值删除在索引上的值添加一个值查找一个值在数组的位置public class ArrayStructures {private int[] theArray = new int[50];private int arraySize = 10;public void generateRandomArray(){for (int i =0; i< arraySize;i++){theArray[i] = (int)(Math.random()*10 + 10);}}public void printArray(){StringBuffer sb = new StringBuffer(...
字典我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页。计算机中,也有这种需求。一、字典字典是存储键值对的数据结构,把一个键和一个值映射起来,一一映射,键不能重复。在某些教程中,这种结构可能称为符号表,关联数组或映射。我们暂且称它为字典,较好理解。如:键=>值"cat"=>2
"dog"=>1
"hen"=>3我们拿出键cat的值,就是2了...
一 存储结构 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;}transient Node<K,V>[] table;内部存储的单元如上所示,整体上就是数组加链表的桶状结构。二 put操作put(key,value)内部调用的是putVal() 下面是源码 jdk1.8采用的是尾插法 final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boolean evict) {Node<K,V>[] tab; Node<K,V...
大学刚学编程的时候,有一句很经典的话程序=数据结构+算法今天有了进一步认识。场景:1、当前局面(1)有现成的封装好的分页组件 返回结果是page。类型为:Page。包括 page 分页信息,data 数据列表 List型。(2)查询了一个数据列表 midResult。类型为 List<Map<String,Object>> 。2、想要的结果 现在想把page midResult 两个结果集进行处理。返回页面。3、解决问题 首先纠结的是,用哪种类型来存储数据。用List 还是Map<St...
基本准备: function CArray(numElems) {this.dataStore = [];this.pos = 0;this.numElems = numElems;this.insert = insert;this.toString = toString;this.clear = clear;this.setData = setData;this.swap =swap;for(var i = 0; i < numElems; ++i) {this.dataStore[i] = i;}}function setData() {for(var i = 0; i < this.numElems; ++i) {this.dataStore[i] = Math.floor(Math.random() * 100);//0-99}}function clear() {...
声明:虽然本系列博客与具体的编程语言无关。但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差。举例也大多是和这两门语言相关。今天先来看看有哪些常见的数据结构(C++ STL视角,其他应该也大同小异吧。哈哈,我猜的!)。所以之后的内容大多从STL出发,然后顺便对比下java中对应的数据结构。作为一名合格的软件开发人员,我们有时不需要深入对这些结构进行深度了解(原子级了解),但是至少我们得知道这些结构...