算法
MaxineZhou
Don't forget try again
展开
-
剑指offer面试题42:翻转单词顺序VS左旋转字符串
一、题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?二、分析1....原创 2020-03-15 10:13:00 · 222 阅读 · 0 评论 -
剑指offer面试题4:字符串替换——原地从后往前替换
1.题目字符串替换要求:将所有字符串中的空格换成%20,如“how are you”要换成"how%20are%20you"2.解法解法一:从前到后复制:时间复杂度为O(n^2)的解法,从前都后原地复制字符串,由于是原地复制,所以在计算好新字符串长度之后,从前到后复制就要求原字符串中有一个空格,空格后面的所有字符就要向后移动两位,时间复杂度过大,太麻烦解法二:从后到前复制,时间复杂...原创 2020-02-23 11:15:45 · 427 阅读 · 0 评论 -
剑指offer面试题16:链表的反转并返回反转后的首结点
方法一:把节点放入栈中,由于栈是先进后出,所以出栈的顺序正好是反序的/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListN...原创 2020-03-03 18:33:19 · 212 阅读 · 0 评论 -
剑指offer面试题13、15:O(1)时间删除链表结点、返回链表中倒数第k个结点、判断链表是否有循环
方法一:把链表结点放入数组中/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, uns...原创 2020-03-03 14:11:09 · 158 阅读 · 0 评论 -
LeetCode——Two Sum
1.Two SumEasy13139473Add to ListShareGiven an array of integers, returnindicesof the two numbers such that they add up to a specific target.You may assume that each input would haveexactly...原创 2020-01-16 15:10:48 · 139 阅读 · 0 评论 -
剑指offer面试题6:重建二叉树,先序遍历、中序遍历原理
下面左图的二叉树的前序遍历(头左右)是:1、 2、4、7 | 3、5、6、8中序遍历(左头右)是:4、7、2、1 | 5、3、8、6根据前序遍历和中序遍历还原二叉树的思路:1.找到根节点在中序遍历数组中的下标2.根据根节点下标划分左右子树,循环递归例如左子树的建成:(1)前序遍历的第一个数1是根节点(头左右),在中序遍历的下标是4,那么前三个4、7、2都是左...原创 2019-04-17 21:07:22 · 315 阅读 · 0 评论 -
什么是堆以及堆排序原理
1.什么是堆?答:堆是一种特殊的完全二叉树问:什么是完全二叉树?答:完全二叉树是二叉树的一种问:什么是二叉树?答:二叉树是树的一种问:什么是树?答:enmmmm,下面让我们来简单从头捋一遍,最后就知道什么是堆,以及堆排序是如何实现的了树:树是不包含回路的连通无向图(任意的两个节点仅有唯一的一条路径连通,在一棵树中加一条边会构成图) 二叉树:是一种特殊的树,只要不为...原创 2019-04-15 17:51:32 · 3480 阅读 · 0 评论 -
排序算法系列1:概念介绍及算法比较
不说话,先上图背起来是不是很痛苦?在不了解原理的情况下这么硬背是很痛苦,下面就让我们来了解一下这么几种排序是如何实现的以及他们之间的应用比较。先来了解几个概念:1.1稳定性:稳定性是指当两个关键字相同时,两者的排序的结果的顺序是否和排序前顺序一样,如果顺序一样则是稳定的算法,不一样则不稳定。下面给出定义:1.2内排序和外排序:内排序是指在整个排序过程中,待排序的所...原创 2019-04-03 07:27:25 · 191 阅读 · 0 评论 -
剑指offer面试题5:从尾到头输出链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。分析:链表本身只记录了下一个节点的位置,不能反过来,所以要把链表的记录导入到一个可以先进后出的容器里,就是栈,题目要求返回一个动态数组vector/*** struct ListNode {* int val;* struct ListNode *next;* ...原创 2019-04-12 10:47:22 · 205 阅读 · 0 评论 -
排序算法系列3——简单选择排序&直接插入排序
选择排序和插入排序的区别:选择排序是从待排序序列中pick一个最大/最小的放到有序序列最后,所以是先排序再插入插入排序是将待排序一端的一个数插入到有序序列中并进行排序,所以是先插入再排序选择排序思想:需从有序序列中选出最小、次小...来放在第一个、第二个...位置,每个位置的选拔都是一轮比较,比如第i个位置要大于第i-1个位置,小于第i+1个位置第i轮的选择首先是将i作为初始化...原创 2019-04-11 22:45:12 · 1184 阅读 · 0 评论 -
排序算法系列2——冒泡排序
冒泡排序1.0这是最容易理解的交换排序的思想,不是真正的冒泡排序,因为它不是利用两两比较临近数字的大小得出结果,而是拿要确定的位置的数字与后边各个数字相比较,确定大当家的位置就要让待选的大当家和后边的小喽啰都比试一番,谁赢了就换,二当家也是如此出来的,依次排列。比如对1,5,3,2,6进行从从小到大升序输出那么第一轮就是比较1和5的大小,由于1<5,则1和5不用交换,然后再让1和3比...原创 2019-04-11 20:40:42 · 262 阅读 · 0 评论