💟💟前言
🥇作者简介:友友们大家好,我是你们的小王同学😗😗
🥈个人主页:小王同学🚗
🥉 系列专栏:牛客刷题专栏📖
📑 推荐一款非常火的面试、刷题神器👉 牛客网
觉得小王写的不错的话 麻烦动动小手 点赞👍 收藏⭐ 评论📄
今天给大家带来的刷题系列是:
剑指offer 链接:👉 剑指offer



里面有非常多的题库 跟面经知识 真的非常良心了!!

因为队列是一种先进先出的数据结构,我们依照它的性质,如果从左到右访问完一行节点,并在访问的时候依次把它们的子节点加入队列,那么它们的子节点也是从左到右的次序,且排在本行节点的后面,因此队列中出现的顺序正好也是从左到右,正好符合层次遍历的特点。
这道题是一道经典的二叉树的层序遍历问题 考虑用bfs(广度优先搜索)
第一步 创建一个存放二叉树根节点的队列 将根节点入队 如果根节点为空 直接返回序列
第二步 由于每层都是从左到右打印的 如果左儿子存在 就入队 如果右儿子空就入队
最后返回序列
- import java.util.*;
- import java.util.ArrayList;
- /**
- public class TreeNode {
- int val = 0;
- TreeNode left = null;
- TreeNode right = null;
- public TreeNode(int val) {
- this.val = val;
- }
- }
- */
- public class Solution {
- ArrayList
list =new ArrayList<>(); - public ArrayList
PrintFromTopToBottom(TreeNode root) { -
-
-
- if(root==null )return list;
- Queue
queue =new LinkedList<>(); -
- queue.add(root); //根节点
- while(queue.size()>0){
- int size=queue.size();
- for(int i=0;i
- TreeNode node=queue.poll();
- if(node.left!=null){
- queue.add(node.left);
- }
- if(node.right!=null){
- queue.add(node.right);
- }
- list.add(node.val);
-
- }
- }
- return list;
-
-
-
-
-
-
-
-
- }
- }
- import java.util.*;
- import java.util.ArrayList;
- /**
- public class TreeNode {
- int val = 0;
- TreeNode left = null;
- TreeNode right = null;
- public TreeNode(int val) {
- this.val = val;
- }
- }
- */
- public class Solution {
- ArrayList
list =new ArrayList<>(); - public ArrayList
PrintFromTopToBottom(TreeNode root) { -
-
-
- if(root==null )return list;
- Queue
queue =new LinkedList<>(); -
- queue.add(root); //根节点
- while(!queue.isEmpty()){
- TreeNode node =queue.poll();
- list.add(node.val);
- if(node.left!=null){
- queue.add(node.left);
- }
- if(node.right!=null){
- queue.add(node.right);
- }
-
- }
- return list;
-
-
-
-
-
-
-
-
-
- }
- }

JZ42 连续子数组的最大和
题目描述

解题思路
这道题是一道dp(动态规划)裸题
定义一个dp[]数组用来存储连续子数组的最大和 dp[i]表示 元素以array[i]结尾的连续子数组的最大和
用max变量记录计算过程中产生的最大的连续和dp[i]

代码详解
暴力做法:时间复杂度O(n^2)
- public class Solution {
- public int FindGreatestSumOfSubArray(int[] array) {
- int n=array.length;
- int max=0;
- int sum=0;
- for(int i=0;i
- sum=0;
- //每次循环一次都需要把sum赋值为零
- for(int j=i;j
- //求从i到j的数值和
- sum+=array[j];
- //每次出现最大值保存下来
- max=Math.max(max,sum);
- }
- }
- return max;
-
-
- }
- }
动态规划 dp: 时间复杂度O(n)
- public class Solution {
- public int FindGreatestSumOfSubArray(int[] array) {
- int n=array.length;
- int max=array[0];
- int dp[]=new int[n+1];
- dp[0]=array[0];
- for(int i=1;i
- dp[i]=Math.max(dp[i-1]+array[i],array[i]);
- max=Math.max(max,dp[i]);
-
- }
- return max;
-
-
-
- }
- }

牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么注册其来吧!👉👉 牛客网
-
相关阅读:
HDMI2.1 Redriver 信号增强 支持8K60
Vanilla JS速度超越了vue/react/svelte---kalrry
【Verilog基础】十进制负数的八进制、十六进制表示
Go语言基础
MobTech ShareSDK Android端快速集成
抖音矩阵系统,抖音矩阵系统源码。抖音SEO源码。
SpringBoot + ShardingSphere 实现分库分表
应用现代化产业联盟,正式成立
elasticSearch(三)报错:org.elasticsearch.ElasticsearchSecurityException:
5G相关信息
-
原文地址:https://blog.csdn.net/weixin_59796310/article/details/126468807