[CareerCup] 3.1 Implement Three Stacks using Array 使用数组来实现三个栈

3.1 Describe how you could use a single array to implement three stacks.

这道题让我们用一个数组来实现三个栈,书上给了两种方法,第一种方法是定长分割 Fixed Division,就是每个栈的长度相同,用一个公用的一位数组buffer来保存三个栈的内容,前三分之一为第一个栈,中间三分之一为第二个栈,后三分之一为第三个栈,然后还要分别记录各个栈当前元素的个数,然后再分别实现栈的基本操作push, pop, top 和 empty,参见代码如下:

class ThreeStacks {
public:
    ThreeStacks(int size) : _stackSize(size) {
        _buffer.resize(size * 3, 0);
        _stackCur.resize(3, -1);
    }

    void push(int stackIdx, int val) {
        if (_stackCur[stackIdx] + 1 >= _stackSize) {
            cout << "Stack " << stackIdx << " is full!" << endl;
        }
        ++_stackCur[stackIdx];
        _buffer[stackIdx * _stackSize + _stackCur[stackIdx]] = val;
    }

    void pop(int stackIdx) {
        if (empty(stackIdx)) {
            cout << "Stack " << stackIdx << " is empty!" << endl;
        }
        _buffer[stackIdx * _stackSize + _stackCur[stackIdx]] = 0;
        --_stackCur[stackIdx];
    }

    int top(int stackIdx) {
        if (empty(stackIdx)) {
            cout << "Stack " << stackIdx << " is empty!" << endl;
        }
        return _buffer[stackIdx * _stackSize + _stackCur[stackIdx]];
    }

    bool empty(int stackIdx) {
        return _stackCur[stackIdx] == -1;
    }

private:
    int _stackSize;
    vector<int> _buffer;
    vector<int> _stackCur;
};

第二种方法是灵活分割 Flexible Divisions,这种方法较为复杂,这里就不细写了。

时间: 2024-10-08 16:56:27

[CareerCup] 3.1 Implement Three Stacks using Array 使用数组来实现三个栈的相关文章

【Sorting】【Array】数组中的逆序对

数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组中的元素个数.其中1 <= n <= 10^5. 第二行包含n个整数,每个数组均为int类型. 输出: 对应每个测试案例,输出一个整数,表示数组中的逆序对的总数. 样例输入: 4 7 5 6 4 样例输出: 5 思路 分治的思想,统计两边内部的逆序对,以及左右两边之间的逆序对 代码 long

【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array(数组中第K大的数)】

[215-Kth Largest Element in an Array(数组中第K大的数)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 代码下载[https://github.com/Wang-Jun-Chao] 原题 Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth d

无序数组array, 找到数组中两个数的最大差值

题目链接: 无序数组array, 找到数组中两个数的最大差值, 且大数出现在小数之后,如:arr[i]-arr[j], 且 i<j.比如: array 是 [2, 3, 10, 6, 4, 8, 1],最大差值是8(10-2) 解题思路: 记录当前访问过的数组中的最小值 min_val; 2) 当前元素值arr[i] - min_val 和 max_diff作比较 若大于 max_diff , 则更新它的值 1 import javax.validation.constraints.Min; 2

golang之 Array(数组)

目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range遍历 五.多维数组 1. 二维数组的定义 2. 二维数组的遍历 六.数组是值类型 七.数组的其他相关方法 一.Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 二.数组的定义 1. 基本语法 // 基本语法: var

[CareerCup] 3.5 Implement Queue using Two Stacks 使用两个栈来实现队列

3.5 Implement a MyQueue class which implements a queue using two stacks. LeetCode上的原题,请参见我之前的博客Implement Queue using Stacks 用栈来实现队列.

[CareerCup] 3.3 Set of Stacks 多个栈

3.3 Imagine a (literal) stack of plates. If the stack gets too high, it might topple. Therefore, in real life, we would likely start a new stack when the previous stack exceeds some threshold. Implement a data structure SetOf Stacks that mimics this.

[CareerCup] 7.4 Implement Multiply Subtract and Divide 实现乘法减法和除法

7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only the add operator. 这道题让我们实现乘法加法和除法,而且规定了只能使用加法.那么我们先来看如何用加法来实现减法,我们知道,减去一个数就等于加上这个数的负数.那么我们先写一个求负数的函数,对于n来说,我们累计n个-1,对于-n来说,我们累计n个1.这样减法的就搞定了,我们再来看乘法,乘

[CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索

11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. You may assume that the array was originally sorted in increasing order. EXAMPLE Input: find 5 in {15, 16, 19, 20, 2

[CareerCup] 17.6 Sort Array 排列数组

17.6 Given an array of integers, write a method to find indices m and n such that if you sorted elements m through n, the entire array would be sorted. Minimize n - m (that is, find the smallest such sequence).