演算法題目---------------01.實現一個特殊的棧,在棧的基本功能上,在實現返回棧中最小的元素
要求:
- pop,push,getMin操作時間複雜度為O(1)
- 設計的棧型別可以使用現成的棧結構
設計兩個棧,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下執行連結串列棧(實現棧的基本功能 push,pop,刪除任意結點,遍歷輸出等)
一、簡要敘述設計思想和技術路線(不少於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】【演算法練習】輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
題目描述: 輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列 {3,32,321},則打印出這三個數字能排成的最小數字為321323。 解題思路: 解題思路: 比較兩個字串s1 S2的
設計一個支持 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧
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使用詳解(一):實現get,post基本網路請求,下載上傳進度監聽以及對Callback自定義的深入理解
1.新增依賴 //必須使用 compile 'com.lzy.net:okgo:3.0.4' //以下三個選擇新增,okrx和okrx2不能同時使用,一般選擇新增最新的rx2支援即可 compile 'com.lzy.net:okrx:1.0.2' compile 'com.lzy
請使用迭代查詢一個list中最小和最大值,並返回一個tuple:# 測試 if findMinAndMax([]) != (None, None): print('測試失敗!') elif findMinAndMax([7]) != (7, 7): print('測試失敗!&
def findminmax(L): a = [] if L != a: min = L[0] max = L[0] for i in L: if min > i: min = i