数据结构与算法
heheSakura
这个作者很懒,什么都没留下…
展开
-
各种排序
归并排序归并排序有两种,分别是从上往下和从下往上,这里先暂时只实现从上往下。从上往下则是,将数组分成一半,再把各自的一半继续对半分,直到被分成一个个单独的数,然后再两两开始合并(即归并)。在归并的时候,用两个变量指向两段数字进行比较的当前数字,小的就排在前面,比向后移动该变量,另一个变量不移动,继续重复这个过程,知道所有的数字有排好序。void merge(int a[],int start...原创 2019-03-15 13:48:29 · 126 阅读 · 0 评论 -
二分查找
给定一个有序数组(假设是升序),和一个数,在这个数组中查找这个数key,并返回所在索引值。二分查找即,先将key和数组中间的元素进行比较,最好是刚好等于啦,就可以返回此时的索引;若中间值大于key,则要到左半边继续寻找;若中间值小于key,则要到右半边去寻找;重复上书步骤,直到找到目标。int binarySearch(int a[],int key){ int left=0; int r...原创 2019-03-15 14:09:03 · 146 阅读 · 0 评论 -
最长公共子序和最长公共子串
最长公共子序列 Largest common subsequence输入两个字符串,找出最长公共子序列。比如"ABCDCEFG",“CEG”,则他们的最长公共子序列是"CEG"对于两个字符串s1,s2,用一个二维数组dp[i][j]来记录两个字符串的最长公共子序列长度。dp[i][j]={0i=0∣∣j=0dp[i−1][j−1]i,j>0,s1[i−1]=s2[j−1]ma...原创 2019-03-16 11:58:55 · 177 阅读 · 0 评论 -
【面试题】找出字符串中唯一一个单独出现的字符
给定一个字符串,里面的字符都是成对出现,除了一个,要求找到这个单独出现的字符。比如“AABBCCDDE”,返回“E”。当然可以遍历,看当前元素是否和后面的字符一样,不一样就返回,这样的时间复杂度是O(n)O(n)O(n)。还有时间效率更高的方法,可以用二分查找。可以观察到,整个字符串长度n一定是奇数,且如果是成对的,每个偶数下标处的字符和紧挨着它后面的奇数字符应该是一样的。当我们用二分查找,...原创 2019-03-17 13:47:51 · 912 阅读 · 0 评论 -
区间合并leetcode56
Given a collection of intervals, merge all overlapping intervals.Example 1:Input: [[1,3],[2,6],[8,10],[15,18]]Output: [[1,6],[8,10],[15,18]]Explanation: Since intervals [1,3] and [2,6] overlaps, m...原创 2019-03-17 15:53:19 · 273 阅读 · 0 评论 -
单链表翻转
输入一个单链表的头节点,翻转该链表,然后输出翻转后的链表的头节点。定义链表节点:typedf struct Node{ int data; Node *next;}Node,*List;非递归翻转:用Cur指针表示当前要进行翻转的节点,用Pre,Next指针分别表示Cur的前继,后继。用tail表示最后的节点。Node* reverse(List *head){ Node *C...原创 2019-03-17 19:25:30 · 630 阅读 · 1 评论 -
水坑面积
题目是的,如上,我是一个懒人输入是一个数组,数组中的元素代表每一个位置的房子的高度,输出积水量。举例输入5 7 6 10 7 5 4 5 7输出7思路遍历数组的每一个元素,找到当前元素左边的最高值,右边的最高值,则改元素能形成的积水量=min(左边最高值,右边最高值)-当前元素值(当然前面的最小值要小于当前元素值)。但这样直接的方式时间复杂度就是O(n2)O(n...原创 2019-03-15 00:45:41 · 410 阅读 · 0 评论 -
C++语法总结
VectorStringstring s="hello world";string s2("hello world");int length1=s.length();int length2=s.size();int length3 = strlen(s.c_str());//因为strlen是对char*用的,所以要先转换为char*algorithm#include<a...原创 2019-04-14 11:27:43 · 298 阅读 · 0 评论