offer

1/输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if (pre == null || in == null) {
        return null;
       }
       return ConstructCore(pre, 0, pre.length -1, in, 0, in.length -1);
        
    }
    public TreeNode ConstructCore(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) {
int rootValue = pre[startPre];
TreeNode root = new TreeNode(rootValue);
root.left = null;
root.right = null;

if (startPre == endPre && startIn == endIn) {
return root;
}

int leftLen = 0;
int rootIn = startIn;
while (startIn <= endIn && in[startIn] != rootValue) {
startIn++;
leftLen++;
}
int leftPreEnd = startPre + leftLen;
if (leftLen > 0) {
// 构建左子树
root.left = ConstructCore(pre, startPre + 1, leftPreEnd, in, rootIn, startIn - 1);
}
if (leftLen < endPre - startPre) {
//构建右子树
root.right = ConstructCore(pre, leftPreEnd + 1, endPre, in, startIn + 1, endIn);
}
return root;
}
}


2,用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

import java.util.Stack;


public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);  
    }
    
    public int pop() {
    Integer re=null; 
      if(!stack2.empty()){  // 如果栈2不是空的,那么把最上面那个取出来
          re=stack2.pop(); 
      }else{ 
              //如果栈2是空的,就把栈1里的数一个个取出来,放到栈2里
          while(!stack1.empty()){   
               re=stack1.pop(); 
               stack2.push(re); 
                            } 
                 //栈2里有数之后,再次把里面的数取出来
                 if(!stack2.empty()){ 
                        re=stack2.pop(); 
                  } 
      } 
      return re; 
    }
}


3/旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
    if(array.length <= 0){
       return -1;
   }//if
   int start = 0,end = array.length-1;
   // 数组有序
   if(array[end] > array[start]){
       return array[start];
   }//if
   // 数组旋转
   // 二分查找
   while(start <= end){
       int mid = (start + end) / 2;
       // [start,mid]有序[mid,end]无序
       if(array[mid] > array[start]){
           start = mid;
       }
       // [start,mid]无序[mid,end]有序
       else if(array[mid] < array[start]){
           end = mid;
       }
       else{
           return array[mid+1];
       }
   }//while 
return array[start]; 
   
    }
}

4/斐波纳妾数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

n<=39

public class Solution {
    public int Fibonacci(int n) {
if(n == 0)
            return 0;
        if(n == 1)
            return 1;
        int numfn1 = 0, numfn2 = 1;
        int currentnum= 0;
        for(int i=2; i<=n; ++i) {
            currentnum = numfn1+numfn2;
            numfn1 = numfn2;
            numfn2 = currentnum;
        }
        return currentnum;
    }

}

8.跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

public class Solution {
    public int JumpFloor(int target) {
if(target<=0){
            return 0;
        }
        if(target==1)
            return 1;
        else if(target==2)
            return 2;
         else
            return JumpFloor(target-1)+JumpFloor(target-2);
    }
}

9/变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

public class Solution {
    public int JumpFloorII(int target) {
        if(target<=0)
            return 0;
        if(target==1)
            return 1;
        else
            return 2 * JumpFloorII(target-1);
    }
}

10/矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

public class Solution {
    public int RectCover(int target) {
int res=0;
        int pre1=1;
         int pre2=2;
         if(target==0) return 0;
        if(target==1) return 1;
          if(target==2) return 2;
          for(int i=3;i<target+1;i++){
             res=pre1+pre2;
             pre1=pre2;
             pre2=res;
        }
         return res;
    }
}


public class Solution {
    public int RectCover(int number) {
if(number==0)
            return 0;
        else if(number==1)
            return 1;
        else if(number==2)
            return 2;
        else 
        return RectCover(number-1)+RectCover(number-2);
        
    }
}

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值