面试算法
_Madrid
华而无实
展开
-
排序
数据结构中最基础的排序,也是面试当中最常问的排序。本篇博客中阐述5中排序。冒泡排序,选择排序,插入排序,归并排序和快速排序。 冒泡排序: 未排序部分在前。排序部分在后,增长方向是从后向前。 外层循环确定未排序部分右边界,内层循环负责从未排序部分挑选出最终冒泡值放置到正确位置。func bubbleSort(src []int) { num := len(...原创 2018-06-27 13:38:54 · 87 阅读 · 0 评论 -
Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same ...原创 2018-04-12 19:12:52 · 99 阅读 · 0 评论 -
最小值栈
题目: 实现一个特殊的栈,可以提供返回最小值的操作。要求: 1. push,pop和getMin时间复杂度都是O(1) 2. 设计的栈可以使用现成的栈结构思路: 使用两个栈,一个做数据栈,一个做最值栈。第一种方法: 不重复的保存最值第二种方法: 重复的保存最值代码:#include <exception&g...原创 2018-05-17 15:57:55 · 215 阅读 · 0 评论 -
两个栈实现队列
题目: 编写一个类,用两个栈实现队列,支持进队列,出队列,获取队列头元素思路: 使用两个栈,因为栈的特性是后进先出,两个栈正好把顺序反过来(stackPush,stackPop)注意: 1. 如果stackPush要往stackPop中压入数据,那么必须一次性把stackPush中全部元素压入,并且删除 2. 如果stackPop不为空,stackP...原创 2018-05-17 17:23:04 · 88 阅读 · 0 评论 -
用一个栈排序另一个栈
题目: 一个栈中的元素都是整型,现在想将改栈从栈顶到栈底从大到小排列,只允许申请一个栈,除此之外可以申请新的变量,但不能申请额外的数据结构。思路: 两个栈,一个记为stackData,一个记为stackSort。一个整型变量cur stackData弹栈到cur,判断stackSort是否为空 如果为空,将cur压栈到stackSort。如果不为空判断c...原创 2018-05-18 09:31:42 · 563 阅读 · 0 评论 -
仅用递归和栈操作逆序一个栈
题目: 一个栈依次压入1,2,3,4,5,那么栈顶到栈底依次是5,4,3,2,1。逆序后,栈顶到栈底依次是1,2,3,4,5。只能使用递归函数思路 两个递归函数 1.getAndRemoveLastElement(); 功能:将栈底元素删除并返回 2.reverseStack(); 功能:获取栈底元素并删除,栈为空的时...原创 2018-05-19 17:36:59 · 779 阅读 · 0 评论 -
搜索二叉树中两个节点的最近公共祖先
搜索二叉树中两个节点的最近公共祖先Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.According to the definition of LCA on Wikipedia: “The lowest common ancestor i...原创 2019-01-07 12:11:37 · 1238 阅读 · 0 评论 -
完全二叉树节点个数
文章目录完全二叉树节点个数完全二叉树实现遍历借助完全二叉树的特点完全二叉树的层数原理第一种情况第二种情况实现时间复杂度关于作者完全二叉树节点个数最简单的解法就是遍历这棵树,时间复杂度是O(N),如果只是这一种解法,就不会有本文了。本文中给出两种解法。完全二叉树第一次看到完全二叉树的定义比较懵,搜索到的定义如下:设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到...原创 2019-01-07 12:15:25 · 2930 阅读 · 0 评论 -
平衡二叉树的判断
文章目录平衡二叉树的判断开门题问题思路实现树的高度平衡性的判断关于作者平衡二叉树的判断二叉树是比较常见的树,而且树的平衡具有非常重要的特性。如果一颗搜索二叉树的平衡性不是很好,那么搜索的效率就不会很高了。开门题前几天考研,今年人大计科的编程题就是判断一棵树是否为平衡二叉树。所以就先拿这个题热热身。问题既然要判断一棵树是否为平衡二叉树,那么久需要先理解什么是平衡树。空树是一颗平衡树...原创 2019-01-07 12:18:06 · 805 阅读 · 0 评论 -
Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return i...原创 2018-04-12 19:52:05 · 305 阅读 · 0 评论 -
Longest Substring Without Repeating Character
Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with...原创 2018-04-12 22:02:14 · 136 阅读 · 0 评论 -
链表是否存在环
链表环的问题有两种,一种是判断是否存在环,另一种是在有的基础上返回入环的第一个节点。简单思路: 1、遍历链表,如果遇到空,那么肯定无环。 2、在遍历的过程中,每个节点都加入到哈希表中,加入前判断是否存在,如果存在的话那么就有环,而且第一个判断存在的节点就是入环的第一个节点。 总结:这个比较简单,既可以做到第一种问题,也可以做到第二种问题。但是用到了额外空间。下面说一下另一个思路,...原创 2018-07-04 16:49:57 · 274 阅读 · 0 评论 -
树的遍历
文章目录普通遍历递归遍历先序遍历中序遍历后序遍历递归总结层次遍历非递归遍历先序遍历中序遍历后序遍历普通遍历普通遍历的意思是时间复杂度为O(N),空间复杂度为O(h)的遍历算法,区别于后边学习的Morris遍历递归遍历 树的定义本身就是递归的,所以非常适合用递归解决问题,树的遍历同样可以用递归来解决。递归的模型非常简单。先中后序的基本都是一样的。先序遍历func preOrder(...原创 2018-11-06 18:55:33 · 232 阅读 · 0 评论 -
二叉树中的一个节点的后继节点
文章目录二叉树中的一个节点的后继节点题目方法普通方法进阶方法二叉树中的一个节点的后继节点这是第一次接触二叉树中后继节点这个概念,觉得很好玩就来看一看。所谓的后继节点就是中序遍历二叉树后这个节点后面的那个节点。题目二叉树的定义多了一个指向父节点的指针,根节点的父节点指针为空。struct node { int Value *node Left *node Right...原创 2019-01-10 14:59:17 · 1970 阅读 · 0 评论 -
完全二叉树的判断
文章目录完全二叉树的判断完全二叉树思路代码关于作者完全二叉树的判断各种二叉树的判断是经常出现的题目,这里给出的是完全二叉树的判断。完全二叉树第一次看到概念觉得很晦涩,但是结合图一下就知道是不是一棵完全二叉树。不知道的完全二叉树的同学先自行搜索相关概念。思路既然树的题目逃不过遍历,那么在四种遍历挑选一种同学们觉得哪种遍历能够解决问题,直觉告诉我就是层次遍历,不要说这是瞎扯,结合完全二叉树...原创 2019-01-11 15:53:42 · 952 阅读 · 0 评论 -
搜索二叉树的判断
文章目录搜索二叉树的判断搜索二叉树思路1思路2关于作者搜索二叉树的判断比较常见的面试题。搜索二叉树概念不说了,相信各位同学都是知道的,不知道的Google一下。思路1起初看到这个题,本来想着直接找递归公式,递归的判断,尝试了一下。发现不行。把尝试的代码贴出来吧。func isValidBST(root *TreeNode) bool { return middleTranve...原创 2019-01-11 15:55:41 · 464 阅读 · 0 评论 -
Top K Frequent Elements
Top K Frequent Elements要求Given a non-empty array of integers, return the k most frequent elements.Example 1:Input: nums = [1,1,1,2,2,3], k = 2Output: [1,2]Example 2:Input: nums = [1], k = 1Ou...原创 2018-10-05 20:00:38 · 113 阅读 · 0 评论 -
Decode String
Decode Stringexamples = "3[a]2[bc]", return "aaabcbc".s = "3[a2[c]]", return "accaccacc".s = "2[abc]3[cd]ef", return "abcabccdcdcdef".思路原创 2018-10-05 00:18:54 · 554 阅读 · 0 评论 -
Group Anagrams
Group AnagramsGiven an array of strings, group anagrams together. Example: Input: [&quot;eat&quot;, &quot;tea&quot;, &quot;tan&quot;, &quot;ate&quot;, &quot;nat&quo原创 2018-10-04 20:00:04 · 149 阅读 · 0 评论 -
回溯法
文章目录回溯思想适用范围经典解空间树子集树排列树关于作者回溯回溯的思想比较简单,但是却可以解决很多问题。思想回溯的思想是穷举所有可能的结果去尝试,如果走的通就继续前进,否则就退回重新选择。在穷举的过程中可以利用剪枝去过滤一部分不可能的结果。适用范围回溯法是穷举,那么必然会得到一个问题的全部解,进而又可以得到一个问题的最优解。这两点也正是回溯法的适用范围。这两种不同的情况又引出了两个属...原创 2019-01-07 12:20:50 · 1709 阅读 · 0 评论