1. 程式人生 > >演算法題目---------------01.實現一個特殊的棧,在棧的基本功能上,在實現返回棧中最小的元素

演算法題目---------------01.實現一個特殊的棧,在棧的基本功能上,在實現返回棧中最小的元素

要求:

  1. pop,push,getMin操作時間複雜度為O(1)
  2. 設計的棧型別可以使用現成的棧結構

設計兩個棧,data中不用管,只需要入棧,當data中入棧,則min中做比較,

  • 如果min中沒有,則直接入棧,
  • 若有則用min中的棧頂的元素和data中入棧的元素進行比較,
  • 若min中棧頂比較小,則向min中壓入當前min棧頂中的元素,若min棧頂中的元素比較大,則壓入data中剛剛入棧的元素,當執行彈出的時候,同步彈出即可
public static class MyStack1 {
		private Stack<Integer> stackData;
		private Stack<Integer> stackMin;

		public MyStack1() {
			this.stackData = new Stack<Integer>();
			this.stackMin = new Stack<Integer>();
		}

		public void push(int newNum) {
			if (this.stackMin.isEmpty()) {
				this.stackMin.push(newNum);
			} else if (newNum <= this.getmin()) {
				this.stackMin.push(newNum);
			}
			this.stackData.push(newNum);
		}

		public int pop() {
			if (this.stackData.isEmpty()) {
				throw new RuntimeException("Your stack is empty.");
			}
			int value = this.stackData.pop();
			if (value == this.getmin()) {
				this.stackMin.pop();
			}
			return value;
		}

		public int getmin() {
			if (this.stackMin.isEmpty()) {
				throw new RuntimeException("Your stack is empty.");
			}
			return this.stackMin.peek();
		}
	}

	public static class MyStack2 {
		private Stack<Integer> stackData;
		private Stack<Integer> stackMin;

		public MyStack2() {
			this.stackData = new Stack<Integer>();
			this.stackMin = new Stack<Integer>();
		}

		public void push(int newNum) {
			if (this.stackMin.isEmpty()) {
				this.stackMin.push(newNum);
			} else if (newNum < this.getmin()) {
				this.stackMin.push(newNum);
			} else {
				int newMin = this.stackMin.peek();
				this.stackMin.push(newMin);
			}
			this.stackData.push(newNum);
		}

		public int pop() {
			if (this.stackData.isEmpty()) {
				throw new RuntimeException("Your stack is empty.");
			}
			this.stackMin.pop();
			return this.stackData.pop();
		}

		public int getmin() {
			if (this.stackMin.isEmpty()) {
				throw new RuntimeException("Your stack is empty.");
			}
			return this.stackMin.peek();
		}
	}

	public static void main(String[] args) {
		MyStack1 stack1 = new MyStack1();
		stack1.push(3);
		System.out.println(stack1.getmin());
		stack1.push(4);
		System.out.println(stack1.getmin());
		stack1.push(1);
		System.out.println(stack1.getmin());
		System.out.println(stack1.pop());
		System.out.println(stack1.getmin());

		System.out.println("=============");

		MyStack1 stack2 = new MyStack1();
		stack2.push(3);
		System.out.println(stack2.getmin());
		stack2.push(4);
		System.out.println(stack2.getmin());
		stack2.push(1);
		System.out.println(stack2.getmin());
		System.out.println(stack2.pop());
		System.out.println(stack2.getmin());
	}

相關推薦

演算法題目---------------01.實現一個特殊基本功能實現返回元素

要求: pop,push,getMin操作時間複雜度為O(1) 設計的棧型別可以使用現成的棧結構 設計兩個棧,data中不用管,只需要入棧,當data中入棧,則min中做比較, 如果min中沒有,則直接入棧, 若有則用min中的棧頂的元素和data中入棧的元素進行

一、實現一個特殊實現基本功能的基礎實現返回元素的操作

empty util run print pri ont com res 字符串 請指教交流! 1 package com.it.hxs.c01; 2 3 import java.util.Stack; 4 5 /* 6 實現一個特殊的棧,在實現棧的基本

演算法與資料機構學習_第一章.和佇列_1.設計一個返回元素功能

設計一個有getMin功能的棧(返回棧中的最小元素) 演算法要求:實現一個特殊的棧,在實現棧的基本功能的基礎上,新增能夠實現返回棧中最小元素的棧,要求演算法的時間複雜讀為O(1),即在常數時間內實現。 思路:在一個棧中在時間複雜讀度為O(1)返回棧中最小元素

20.元素的min函數

-c 數據 new sta min spa 元素 結構 integer 定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間復雜度應為O(1)) import java.util.Stack; /* * 解題註意:原棧多大,min棧就

定義的資料結構請在該型別實現一個能夠得到所含元素的min函式(時間複雜度應為O(1))。

import java.util.Stack; public class Solution { private Stack<Integer> min_stack=new Stack<Integer>(); private Stack<Integer&

定義的資料結構請在該型別實現一個能夠得到所含元素的min函式(時間複雜度應為O(1))

/** 思路:利用兩個棧來實現,一個主棧正常壓棧出棧,一個輔助棧用來儲存主棧所有值的最小值, 壓棧時,當壓入的值比輔助棧棧頂值大時,主棧正常壓棧,輔助棧不壓棧,小於等於二者都壓棧; 出棧時,當主棧和輔助棧棧頂元素不相等時,主棧正常出棧,輔助棧不出棧。 */ class Sol

定義的資料結構請在該型別實現一個能夠得到所含元素的min函式 (時間複雜度應為O(1))。

import java.util.Stack; /** * 定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式 * (時間複雜度應為O(1))。 */ public class Solution { static Stack<Integer> da

定義的資料結構請在該型別實現一個能夠得到元素的min函式。時間複雜度都是O(1)

定義棧的資料結構,請在該型別中實現一個能夠得到棧最小元素的min函式。要求:使得時間複雜度都是O(1) 完成如下的函式: import java.util.Stack; public class Solution { public void pus

每天一道LeetCode-----實現一個提供一個介面用於返回

Min Stack 實現一個棧,除了基本功能外需要提供一個介面用於返回棧中元素的最小值 基本功能使用std::stack就夠了,如果每次需要最小值時都遍歷棧中元素的話會很麻煩,因為棧不支援遍歷(本質上是沒有提供迭代器),所以只能在push的時候記錄最

定義的資料結構請在該型別實現一個能夠得到所含元素的min函式(時間複雜度應為

import java.util.Stack; //個人認為這種方式有問題,假設把最小值出棧,再求最小值就有問題 public c

linux下執行連結串列實現基本功能 pushpop刪除任意結點遍歷輸出等)

一、簡要敘述設計思想和技術路線(不少於300字)(20分)。 設計思想:利用Linux GNU make C 專案管理軟體工具實現資料結構棧(Stack)。實現Push,Pop,Delete,Search,Visit through,Clear功能。節點的資料設計具有一般性(使用void *da

設計一個演算法從數 A[1:n] 同時找出元素元素只需要不超過 1.5n-2 次比較。

題目:設計一個演算法從數A[1:n]中同時找出最大元素和最小元素,只需要不超過1.5n-2次比較。 #include <stdio.h> #define MIN -1 #define MAX 65535 void find_max_min( int num[], int len ) {

題目:給一個不多於5位的正整數要求:一、求它是幾位數二、逆序打印出各位數字。

// Created by www.runoob.com on 15/11/9.// Copyright © 2015年 菜鳥教程. All rights reserved.//#include<stdio.h>int main(){long a,b,c,d,e,x; printf(

【程式24】 題目:給一個不多於5位的正整數要求: 一、求它是幾位數二、逆序打印出各位數字。

/* 2017年3月8日9:41:34 java基礎50道經典練習題 例24 Athor: ZJY Purpose: 【程式24】 題目:給一個不多於5位的正整數,要求: 一、求它是

【Java】【演算法練習】輸入一個正整數陣列把數組裡所有數字拼接起來排成一個數列印能拼接出的所有數字中最小一個。例如輸入陣列{332321}則打印出這三個數字能排成的最小數字為321323。

題目描述:         輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列 {3,32,321},則打印出這三個數字能排成的最小數字為321323。 解題思路:        解題思路: 比較兩個字串s1 S2的

設計一個支持 pushpoptop 操作並能在常數時間內檢索到元素

http after 返回 ice n) ring result -- ava 小結: 1、 常數時間內檢索到最小元素 最小棧 - 力扣(LeetCode)https://leetcode-cn.com/problems/min-stack/ 設計一個支持

黑科技!僅需 3 行程式碼就能將 Gitter 整合到個人網站實現一個 IM 即時通訊聊天室功能

歡迎關注個人微信公眾號: 小哈學Java, 優質文章第一時間推送!! 個人網站: https://www.exception.site/essay/how-to-use-gitter-on-your-website-quickly 一、前言 小哈從很早以前就有寫博文的習慣,不過那個時候,也沒咋認真地寫

演算法初級01——認識時間複雜度、對數器、 master公式計算時間複雜度、和問題和逆序對問題

雖然以前學過,再次回顧還是有別樣的收穫~   認識時間複雜度 常數時間的操作:一個操作如果和資料量沒有關係,每次都是固定時間內完成的操作,叫做常數操作。 時間複雜度為一個演算法流程中,常數運算元量的指標。常用O(讀作big O)來表示。具體來說,在常數運算元量的表示式中,

安卓專案實戰之強大的網路請求框架okGo使用詳解(一):實現getpost基本網路請求下載傳進度監聽以及對Callback自定義的深入理解

1.新增依賴 //必須使用 compile 'com.lzy.net:okgo:3.0.4' //以下三個選擇新增,okrx和okrx2不能同時使用,一般選擇新增最新的rx2支援即可 compile 'com.lzy.net:okrx:1.0.2' compile 'com.lzy