劍指offer:31-32記錄(4道)

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如,序列 {1,2,3,4,5} 是某棧的壓棧序列,序列 {4,5,3,2,1} 是該壓棧序列對應的一個彈出序列,但 {4,3,5,1,2} 就不可能是該壓棧序列的彈出序列。

?

示例 1:

輸入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
輸出:true
解釋:我們可以按以下順序執行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
示例 2:

輸入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
輸出:false
解釋:1 不能在 2 之前彈出。
?

提示:

0 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed?是?popped?的排列。

思路:模擬,每壓入一個就嘗試彈出到不能再彈。到最后棧空就可以。

class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {Stack<Integer> stack = new Stack<Integer>();int j = 0;for(int i = 0;i < pushed.length;i++){stack.push(pushed[i]);while(!stack.empty() && stack.peek() == popped[j]){stack.pop();j++;}}return stack.empty();}
}

從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序打印。

?

例如:
給定二叉樹:?[3,9,20,null,null,15,7],

? ? 3
? ?/ \
? 9 ?20
? ? / ?\
? ?15 ? 7
返回:

[3,9,20,15,7]
?

提示:

節點總數 <= 1000

思路:層序遍歷,出隊列時用另一個list記錄,最后轉為數組即可。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public int[] levelOrder(TreeNode root) {if (root == null) return new int[0];Queue<TreeNode> queue = new LinkedList<>();List<Integer> res = new ArrayList<>();queue.add(root);while(!queue.isEmpty()) {TreeNode node = queue.poll();res.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}int[] _result = new int[res.size()];for (int i = 0; i < res.size(); i++) {_result[i] = res.get(i);}return _result;}
}

從上到下按層打印二叉樹,同一層的節點按從左到右的順序打印,每一層打印到一行。

?

例如:
給定二叉樹:?[3,9,20,null,null,15,7],

? ? 3
? ?/ \
? 9 ?20
? ? / ?\
? ?15 ? 7
返回其層次遍歷結果:

[
? [3],
? [9,20],
? [15,7]
]
?

提示:

節點總數 <= 1000

思路:遍歷時一次彈完一層所有節點(隊列內當時的所有節點),并用一個list保存。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();List<List<Integer>> res = new ArrayList<>();if(root != null) queue.add(root);while(!queue.isEmpty()) {List<Integer> tmp = new ArrayList<>();for(int i = queue.size(); i > 0; i--) {TreeNode node = queue.poll();tmp.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}res.add(tmp);}return res;}
}

請實現一個函數按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。

?

例如:
給定二叉樹:?[3,9,20,null,null,15,7],

? ? 3
? ?/ \
? 9 ?20
? ? / ?\
? ?15 ? 7
返回其層次遍歷結果:

[
? [3],
? [20,9],
? [15,7]
]
?

提示:

節點總數 <= 1000

思路:和上題一樣,只不過加一句話,翻轉部分temp。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();List<List<Integer>> res = new ArrayList<>();if(root != null) queue.add(root);while(!queue.isEmpty()) {List<Integer> tmp = new ArrayList<>();for(int i = queue.size(); i > 0; i--) {TreeNode node = queue.poll();tmp.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}if(res.size() % 2 == 1) Collections.reverse(tmp);res.add(tmp);}return res;}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444126.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

炸窩Vector簡介

/** 1.Vector的介紹&#xff1a;* Vector<E>是所有單列集合的鼻祖&#xff0c;但是在JAVA1.2版本之后就被Collection集合所替代&#xff0c;Vector可以實現可增長的對象數組* 與數組一樣&#xff0c;它包含可以使用整數索引進行訪問的組件* 但是它的大小可以根據需要增加…

劍指offer:33-37記錄

輸入一個整數數組&#xff0c;判斷該數組是不是某二叉搜索樹的后序遍歷結果。如果是則返回 true&#xff0c;否則返回 false。假設輸入的數組的任意兩個數字都互不相同。 參考以下這顆二叉搜索樹&#xff1a; 5 / \ 2 6 / \ 1 3 示例 1&#xff1a; 輸入: [1,6,…

劍指offer:39-42記錄

數組中有一個數字出現的次數超過數組長度的一半&#xff0c;請找出這個數字。 你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。 示例 1: 輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 輸出: 2 限制&#xff1a; 1 < 數組長度 < 50000 思路&#xff1a;…

炸窩哈希值的原理

package asdfg; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class aaa { public static void main(String[] args) {/*** 小提示&#xff1a;* 1.對于所有沒有索引的方法&#xff0c;我們都不能使用for循環進行遍歷* 2.提到接口&am…

劍指offer:45-48記錄

輸入一個正整數數組&#xff0c;把數組里所有數字拼接起來排成一個數&#xff0c;打印能拼接出的所有數字中最小的一個。 示例 1: 輸入: [10,2] 輸出: "102" 示例 2: 輸入: [3,30,34,5,9] 輸出: "3033459" 提示: 0 < nums.length < 100 說明:…

炸窩(可變函數)

可變函數源碼理解&#xff1a;學生角度&#xff0c;更易操作 public static void main(String[] args) {/*int cadd(10,29);System.out.println(c);*///此時可以隨意的進行數據的傳遞add(20,30,40);//[I1db9742:解釋&#xff0c;中括號代表是一個數組&#xff0c;為一個地址值…

劍指offer:50-53記錄

在字符串 s 中找出第一個只出現一次的字符。如果沒有&#xff0c;返回一個單空格。 示例: s "abaccdeff" 返回 "b" s "" 返回 " " 限制&#xff1a; 0 < s 的長度 < 50000 思路&#xff1a;map記錄次數&#xff0c;再…

Eclipse安裝插件的幾種方式

前段時間Google轉向了IDEA&#xff0c;貌似有些動搖了Eclipse作為Java領域IDE龍頭老大的位置&#xff0c;為此引起了Eclipse粉絲和IDEA粉絲的集體罵戰。類似這種罵戰向來都不絕于耳&#xff0c;貌似程序員的都比較多&#xff0c;可能大家都是搞技術出身&#xff0c;都很自信。其…

炸窩(Collections當中的addAll方法)

public class aaa { public static void main(String[] args) {/** java.util.Collections是集合工具類&#xff0c;用來對集合進行操作&#xff0c;* * 集合Collections當中的兩個方法&#xff1a;* 1.addAll方法&#xff1a;因為是靜態方法&#xff0c;嗯所以可以.直接吹風機…

劍指offer:55-58記錄

輸入一棵二叉樹的根節點&#xff0c;求該樹的深度。從根節點到葉節點依次經過的節點&#xff08;含根、葉節點&#xff09;形成樹的一條路徑&#xff0c;最長路徑的長度為樹的深度。 例如&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7]&#xff0c; 3 / \ 9 20 …

Map集合知識點(炸窩)

/** * 簡單的介紹一下我們接下來準備學習的集合MAP集合 * * Map集合的簡單概述&#xff1a; * 其中的健是不能進行重復的&#xff0c;而且每一健只能映射一個值&#xff0c;簡單的說就是K與V是一一對應的&#xff0c;不能有其他的關系&#xff0c; * 但是我們注意到value值是可…

劍指offer:63-66記錄

假設把某股票的價格按照時間先后順序存儲在數組中&#xff0c;請問買賣該股票一次可能獲得的最大利潤是多少&#xff1f; 示例 1: 輸入: [7,1,5,3,6,4] 輸出: 5 解釋: 在第 2 天&#xff08;股票價格 1&#xff09;的時候買入&#xff0c;在第 5 天&#xff08;股票價格 6&a…

【大總結3】leetcode解題總覽(算法、劍指offer、SQL、多線程、shell)

3/22更新 劍指offer 題目鏈接 建議大部分題都會做&#xff0c;都能比較快速且準確的寫出來。關于做題方式&#xff0c;我的建議是&#xff1a;一道一道刷即可&#xff0c;因為難度一般&#xff0c;不用系統的學習什么知識&#xff0c;遇到實在不會的就跳過即可。 我這里寫了…

逆序存儲【數據結構】

C語言中malloc是動態內存分配函數。 函數原型&#xff1a;void malloc(unsigned int num_bytes); 參數&#xff1a;num_bytes 是無符號整型&#xff0c;用于表示分配的字節數。 返回值&#xff1a;如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定)&#xff0…

為什么 main 方法是 public static void ?

main 方法是我們學習Java編程語言時知道的第一個方法&#xff0c;你是否曾經想過為什么 main 方法是 public、static、void 的。當然&#xff0c;很多人首先學的是C和C&#xff0c;但是在Java中main方法與前者有些細微的不同&#xff0c;它不會返回任何值&#xff0c;為什么 ma…

返回地址【數據結構】

小問題&#xff1f; 1.我們是如何根據地址值來找到我們對應的數據的&#xff1f; 詳細陳述一下&#xff1a;當我們開辟一個整數類型&#xff0c;取名為a&#xff0c;假設地址空間是從數值為2000進行存儲&#xff0c;并且我們假設整形占用4個字節&#xff0c;那么我們在內存中需…

【超級詳細的小白教程】Hexo 搭建自己的博客

– 前言 這是一篇有關如何使用 Github Pages 和 Hexo 搭建屬于自己獨立博客的詳盡教程&#xff0c;本人是軟件工程專業本科生&#xff0c;目前只學習了C和C編程語言&#xff0c;對網站開發的有關知識幾乎為零&#xff0c;這也是我搭建好自己的博客之后寫的第一篇博客&#xff…

面向對象思想精華總結

一、三大特性 封裝繼承多態 二、類圖 泛化關系 (Generalization)實現關系 (Realization)聚合關系 (Aggregation)組合關系 (Composition)關聯關系 (Association)依賴關系 (Dependency) 三、設計原則 S.O.L.I.D其他常見原則 參考資料 一、三大特性 封裝 利用抽象數據類型將數據…

數組名與指向數組的指針之間的聯系與區別【數據結構】

我們遇到一個非常棘手的問題&#xff0c;這個問題就是&#xff0c;對于一堆數據來說&#xff0c;我們進行存儲&#xff0c;放到一個指定的倉庫當中&#xff0c;先前我們使用數組加加標的形式進行訪問倉庫當中的元素位置&#xff0c;但是呢&#xff0c;現在我們使用的是一個指針…

Struts2的action中處理JSONP方式提交的中文亂碼問題:

昨天在做公司網站的時候出現了一個中文亂碼問題&#xff0c;讓我郁悶了一晚上和一上午&#xff0c;最后在網友的提示下&#xff0c;我終于解決了&#xff0c;現在寫出來供后來的兄弟們參考&#xff1a; 1.問題是這樣的&#xff0c;就是客戶端是以JSONP的方式提交的數據&#x…