剑指offer第二章 1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 class Solution { public: bool Find(int target, vector<vector<int> > array) { /*二维数组的行数和列数*/ int rows = array.size(); ].size(); int row; in…
// 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. #include <iostream> #include <stack> using namespace std; template <typename T> class CQueue//模板类,习惯就好了 { private: stack<T> sta…
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部.pop() -- 从队列首部移除元素.peek() -- 返回队列首部的元素.empty() -- 返回队列是否为空. 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的. 编程思想 由于队列是先进先出的,而栈是先进后出的,所以…
旋转数组的最小数字 题目:把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如:数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转数组.此时的旋转数组是可以划分为两个排序的子数组.最小值为这两个子数组分界线. 思路:写一个函数minArrary(int*arrary int len),返回值为int.定义三个指针left=mid=0(如果数组是将前面的0个元素放到数组的后面,那么旋转数组即是原数组,最小值即为mi…
面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyright(C) 2019 Hangzhou Differsoft Co., Ltd. All rights reserved. * */ package com.java.offer; /** * 一个长度为n的数组,值的范围在0~n-1内,有一个或多个数字重复,求其中任意一个 * * @since…
算法:排序和查找(二分查找,归并排序,快速排序),位运算等. 查找:顺序查找,哈希查找,二叉排序树查找,哈希表. 二分查找可以解决:"旋转数组中的最小数字","数字在排序数组出现的次数"等问题. 哈希表:优点:O(1)时间内查找一个元素的效率最高. 缺点:需要额外的空间来实现哈希表. 二叉排序树查找:对应二查搜索树查找,可以解决:"二叉收索树的后续遍历","二查搜索树和双向链表" 排序:排序算法要熟练,额外空间消耗,平均时间复…
1. 题目描述 /** 请实现一个函数按照之字形打印二叉树, 即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印, 第三行按照从左到右的顺序打印, 其他行以此类推. */ 2. 双向队列 /*思路:利用Java中的LinkedList的底层实现是双向链表的特点. 1)可用做队列,实现树的层次遍历 2)可双向遍历,奇数层时从前向后遍历,偶数层时从后向前遍历 */ 3. 代码(双向链表+层次遍历) import java.util.*; public class Solution { p…
书中方法:队列是先进先出的,栈是先进后出的,试想把一串数压入A栈,接着一个个出栈并压入B栈,便会完成"头在下"到"头在上"的转变.B栈内还有元素时,直接出栈表示出列,如果没有元素则将A栈内元素压入B栈内.这个没有测试,省略了异常抛出. public class QueueImplementionByTwoStack<Integer> { private Stack<Integer> in = new Stack<>(); priv…
一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用C++结合模板实现的定义,这里我们采用C#结合泛型来实现这个队列的定义,我们要实现的就是两个方法:AppendTail与DeleteHead public class CQueue<T> { private Stack<T> stack1; private Stack<T>…
#include <iostream> #include <stack> using namespace std; template <typename T> class SQueue { public: SQueue():cnt(){}; void push(const T& node); T pop(); int getSize(); private: stack<T> pushstack; stack<T> popstack; in…