数据结构与算法
嘉木空青
工科硕士,从事信号处理,数据分析,人工智能算法研究。19年入职场,现从事机器学习工作。
展开
-
华为OJ:开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
用到了类string的length(), size(),find_first_of(),find_last_of(),substr(),push_back()函数 #include <iostream>#include <algorithm>#include <vector>#include <string>using namespac...原创 2018-09-03 11:13:37 · 1669 阅读 · 1 评论 -
C++:计算字符串最后一个单词的长度,单词以空格隔开。
C++:使用string类 输入使用:#include <iostream>#include <string>using namespace std;string s;getline(cin, s);#include <string>#include <iostream>using namespace std;int...原创 2018-08-29 20:03:22 · 1762 阅读 · 0 评论 -
C++:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5struct ListNode{ int val; struct ListNode *next; ListNode(int x): val(x), ne...原创 2018-08-29 19:07:52 · 1033 阅读 · 0 评论 -
排序算法的效率
目录冒泡排序快速排序选择排序堆排序插入排序希尔排序合并排序稳定排序的概念对于大小为n的排序数据量:冒泡排序https://blog.csdn.net/Doutd_y/article/details/81911362计算复杂度:平均速度为,最坏情况下的速度为快速排序与冒泡排序类似,也是基于交换排序的思想。https://blog.csdn.ne...原创 2018-08-25 11:52:55 · 366 阅读 · 0 评论 -
华为OJ:给定n个字符串,请对n个字符串按照字典序排列。
#include <iostream>#include <map>#include <string>using namespace std;int main(){ int n; cin >> n; string s; map<string, int> s_set; int k = n; for (; k >=...原创 2018-08-31 22:03:56 · 1502 阅读 · 0 评论 -
C++STL(标准模板库)之关联容器:set
setset集合是c++ STL库中自带的一个容器,set具有以下两个特点:set中的元素都是排好序的 set集合中没有重复的元素set的各成员函数列表如下:1. begin()--返回指向第一个元素的迭代器2. clear()--清除所有元素3. count()--返回某个值元素的个数4. empty()--如果集合为空,返回true5. end()--返回指向最...原创 2018-08-31 15:45:07 · 489 阅读 · 0 评论 -
C++STL(标准模板库)之顺序容器:vector
向量vector是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。std::vector::eraseiterator erase (const_iterator position);iterator erase (const_iterator first, const_iterato...原创 2018-08-31 15:39:17 · 609 阅读 · 0 评论 -
基于数组的归并排序--递归与非递归法(C++/C)
目录递归法非递归法思想:分而治之:参考网上其他的示意图递归法自顶向下归并排序是建立在归并操作上的一种时间复杂度为,空间复杂度为有效排序算法,思想是分而治之。// 归并排序_递归.cpp: // 以数组为例子#include "stdafx.h"#include<iostream>using namespace std;// 在原始数组...原创 2018-08-24 11:27:37 · 1339 阅读 · 0 评论 -
基于链表的插入排序(C++/C)
对于近乎有序的数据而言插入排序算法十分高效。 对于规模很小的数据插入排序也是极佳的选择,由于其所进行的操作很简单所以平均每次操作的开销都很小。这一点使得像快速排序以及归并排序等算法都用插入排序来处理自己划分出来的小区间以优化性能 插入排序是稳定的排序算法,即不改变相同大小元素的原始次序关系。链表类:struct ListNode{ int val; ListNode ...原创 2018-08-10 11:05:30 · 2544 阅读 · 0 评论 -
基于数组的二分查找法--递归与非递归(C++/C)
目录概述非递归法递归法主函数概述折半查找:时间复杂度:,空间复杂度:元素存储在数组中;有序排列。 非递归法int binarySearch(const int arr[], int search_val, int low, int high){ while (low <= high) { int middle ...原创 2018-08-09 23:53:19 · 936 阅读 · 0 评论 -
两个有序链表的合并--递归与非递归(C/C++)
目录链表类非递归法递归法主函数调用链表类// 链表类:struct ListNode{ int val; ListNode *next; ListNode (int x): val(x), next(NULL) {}};非递归法// 合并两个有序链表:ListNode *mergeTwoLists(ListNode *l1, Lis...原创 2018-08-09 22:28:51 · 3311 阅读 · 0 评论 -
两个有序数组的合并--非递归(C++/C)
以从小到大排序为例:思路:每次比较两个数组的第一个数,取较小的那一个,取完之后将该数从对应数组中删除,然后继续比较,如果某一数组为空,则直接将另外一个数组的元素依次复制到新的合并数组中即可。#include <iostream>using namespace std;void mergeTwoArray(int *a, int n, int *b, int m, int ...原创 2018-08-09 22:20:48 · 736 阅读 · 0 评论 -
基于链表的归并排序--递归法(C++/C)
目录定义链表类递归法定义链表类struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(NULL) {}};递归法需要几个辅助函数:1)找到单链表的中间节点ListNode *findMiddle(ListNode *head){ List...原创 2018-08-09 21:56:42 · 1869 阅读 · 2 评论 -
基于数组的归并排序--递归法(C++/C)
void mergeTwoArray(int *a, int left, int mid, int right, int *temp){ int i = left; int j = mid + 1; int t = 0; while (i <= mid && j <= right) { if (a[i] <= a[j]) temp[t++]...原创 2018-09-16 09:08:45 · 754 阅读 · 0 评论