1.给栈添加一个获取最小值的方法(元素为Integer型),要求时间复杂度为O(1)

分析:在数据结构与算法中,当要求时间复杂度最小时基本都是要牺牲空间复杂度。栈是先进后出,此处要求用栈实现一个获取最小值的方法且时间复杂度为O(1),首先考虑的方向就是再借助一个栈来实现,这个栈主要用来保存最小值序列(这个地方可以思考一下为什么不能用一个变量来保存最小值)。

下面直接附上代码:

  

public class StackMin{
    Stack<Integer> stackDate=new Stack<>();//一个普通栈,存入进入栈的元素
    Stack<Integer> stackMin=new Stack<>();//存入最小值序列
    public void push(Integer num){
        stackDate.push(num);
        if(stackMin.isEmpty()){
            stackMin.push(num);
        }else{
            if(num<stackMin.peek()){
                stackMin.push(num);
            }else{
                stackMin.push(stackMin.peek());
            }
        }
    }
    public Integer pop(){
        Integer data=stackDate.pop();
        if(data==stackMin.peek()){
            stackMin.pop();
        }
        return data;
    }
    public Integer getMin(){
        return stackMin.peek();
    }
}

   

原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10128582.html

时间: 2024-10-13 01:10:55

1.给栈添加一个获取最小值的方法(元素为Integer型),要求时间复杂度为O(1)的相关文章

给数组添加一个根据指定下标删除元素的方法、得到0-100的随机数不重复(js)、得到外联样式的css样式值

/** *删除数组指定下标或指定对象 */ Array.prototype.remove=function(obj){ for(var i =0;i <this.length;i++){ var temp = this[i]; if(!isNaN(obj)){ temp=i; } if(temp == obj){ for(var j = i;j <this.length;j++){ this[j]=this[j+1]; } this.length = this.length-1; } } }

如果使用实例化对象,来为类动态的添加一个 字符串形式的 方法。

import types class MyClass: @staticmethod def extends(self_name, method_name, method_str, ): ''' 使用实例化对象 动态的为 类添加一个 字符串形式的 方法. :param self_name: 调用该方法的对象 的名字 :param method_name: 要添加的方法的名字 :param method_str: 这个方法的 具体代码 ''' method_str = method_str + '\

设计一个获取最小值时间复杂度为O(1)的栈

[题目] 实现一个栈,在实现栈的基本功能的前提下,再实现返回最小元素的操作. [要求] pop.push.getMin操作的时间复杂度都是O(1) 设计的类可以使用现成的栈结构. [分析] 想要使得获取最小值的时间复杂度为O(1),最简单的方法就是提前将最小值记录下来,当我们需要获取时便可直接获取 栈的特点就是先进后出.它的操作具有一定规律,这使得我们可以很好的记录最小值. 很容易就能够想到"双栈"来实现 [实现] 实现语言:C++ 源代码如下: #include<iostrea

后台给GridView绑定数据时给每一行添加一个JS方法

--------JS function ReturnDictionaryValues(srcElement) { top.document.getElementById("_DialogFrame_a1").contentWindow.document.getElementById('txt_CAR_ID').value=srcElement.cells[0].innerText; top.document.getElementById("_DialogFrame_a1&qu

为 JS 的字符串,添加一个 format 的功能。

<script> String.prototype.format = function (kwargs) { var ret = this.replace(/\{(\w+)\}/g, function (substring, args) { return kwargs[args] }); } </script> js 中是没有 format 这种格式化的方法的. 但是 因为字符串也是一个原型类,所有的方法都在  prototype中. 所以可以向这个里面添加一个 自定义的 form

H5自定义属性的规定和添加获取自定义属性的方法

元素属性那么多,如何区分是自带的属性还是默认的属性呢? H5规定自带的属性有个data- 前缀,如data-index="1",那么,如何设置和获取属性值呢,请看下文. <script> var divele = document.querySelector("div"); //我们常用的添加和获取自定义属性 divele.setAttribute("flag", 1); console.log(divele.getAttribute

js获取第n个元素节点

一个获取第n个元素节点的函数,现在只能通过初入html标签获取元素,功能还不完善 演示:html <ul id="list"> <li>1<button>a</button></li> <li>2<button>b</button><button>o</button></li> <p>test</p> <li>3<

设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值,push、pop、min三个方法的时间复杂度必须是O(1)

1 /* 2 * 设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值, 3 * push.pop.min三个方法的时间复杂度必须是O(1) 4 * 一种解法是在Stack类里添加一个Int型的minValue,当minValue出栈时,我们会搜索整个栈 5 * 找出最新的最小值,但是却不符合操作时间为O(1)的要求 6 * 如有: 7 * push(4)//最小值:4 8 * push(5)//最小值:4 9 * push(3)//最小值:3 10 * push(1)

清除Cookie、获取指定Cookie的值、添加一个Cookie(24小时过期)、添加一个Cookie

MXS&Vincene  ─╄OvЁ  &0000007 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳. MXS&Vincene  ─╄OvЁ:We're here to put a dent in the universe. Otherwise why else even be here? 正文>>>>>