leetcode日常 4.20

4.20

面试题32 - III. 从上到下打印二叉树 III

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nxwRzI9Y-1587433773926)(E0728CA4921D4749872D8F7A3B5EA036)]

思路:

  1. 先存下各层树的层次遍历节点,
  2. 再按照s型遍历这些节点的值保存下来

代码:

/**
 * 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) {
    
    
       List<List<TreeNode>> result=new ArrayList<>();
		List<List<Integer>> result2=new ArrayList<>();
		if(root==null)
		{
    
    
			return result2;
		}
		List<TreeNode> oList=new ArrayList<>();
		oList.add(root);
		result.add(oList);

		while(true)
		{
    
    
			List<TreeNode> treeNodes=result.get(result.size()-1);
			List<TreeNode> list=new ArrayList<>();
			for(int i=0;i<treeNodes.size();i++)
			{
    
    
				TreeNode treeNode=result.get(result.size()-1).get(i);
				if(treeNode.left!=null)
				{
    
    
					list.add(treeNode.left);
				}
				if(treeNode.right!=null)
				{
    
    
					list.add(treeNode.right);
				}
				
			}
			if(list.size()==0)
			{
    
    
				break;
			}	
			result.add(list);
		}
		int n=0;
		for(int j=0;j<result.size();j++)
		{
    
    
			List<Integer> list=new ArrayList<>();
			if(n==0)
			{
    
    
				for(int q=0;q<result.get(j).size();q++)
				{
    
    
				
					list.add(result.get(j).get(q).val);
				}
				n=1;
			}
			else if(n==1)
			{
    
    
				for(int q=result.get(j).size()-1;q>=0;q--)
				{
    
    
					
					list.add(result.get(j).get(q).val);
				}
				n=0;
			}
			
			result2.add(list);
		}
		return result2;
    }
}

评价:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irYuK3Il-1587433773930)(29648A92977241ED82159030EDF02B9D)]

883. 三维形体投影面积

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ul8Ogv2-1587433773935)(A3A79575A9E245A5A51644B9501BB76E)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Zit865z-1587433773940)(43D68738AE104072BCFC57C97B5256ED)]

思路:

  1. 从上看:非0个数
  2. 从左看:每行的最大值相加
  3. 从右看:每列的最大值相加

代码:

class Solution {
    
    
    public int projectionArea(int[][] grid) {
    
    
        int sum1=0;
		 	int sum2=0;
		 	for(int i=0;i<grid.length;i++)
		 	{
    
    
		 		int max=0;
		 		for(int j=0;j<grid[0].length;j++)
		 		{
    
    
		 			if(grid[i][j]!=0)
		 			{
    
    
		 				sum1+=1;
		 			}
		 			if(grid[i][j]>max)
		 			{
    
    
		 				max=grid[i][j];
		 			}
		 		}
		 		sum2=max+sum2;
		 	}
		 	int sum3=0;
		 	for(int i=0;i<grid[0].length;i++)
		 	{
    
    
		 		int max=0;
		 		for(int j=0;j<grid.length;j++)
		 		{
    
    
		 			if(grid[j][i]>max)
		 			{
    
    
		 				max=grid[j][i];
		 			}
		 		}
		 		sum3=max+sum3;
		 	}
		 	System.out.println("sum1:"+sum1);
		 	System.out.println("sum2:"+sum2);
		 	System.out.println("sum3:"+sum3);
		 	return sum1+sum2+sum3;
    }
}

评价:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OVQB4yWM-1587433773944)(6D2F466A620640878649BE4C34A21BEE)]

1262. 可被三整除的最大和

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9qicZOi-1587433773946)(50A01A6C6FE04DC28516554850C216A2)]

思路:

  1. 遍历一遍数组,计算数组的总和,保存下除3余1的最小的两个和除三余二的最小的两个
  2. 若总和可以被三除尽,则直接返回
  3. 若总和余1,减去余二的最小的两个或者减去余1的最小那个(看哪部分小)
  4. 若总和余2,减去余一的最小的两个或者减去余2的最小那个(看哪部分小)
  5. 时间复杂度:O(N) 空间复杂度:O(1)

代码:

class Solution {
    
    
    public int maxSumDivThree(int[] nums) {
    
    
        int sum=0;
		int min11=Integer.MAX_VALUE;
		int min12=Integer.MAX_VALUE;
		int min21=Integer.MAX_VALUE;
		int min22=Integer.MAX_VALUE;
		for(int i=0;i<nums.length;i++)
		{
    
    
			sum=sum+nums[i];
			if(nums[i]%3==1)
			{
    
    
				if(nums[i]<min11)
				{
    
    
					min12=min11;
					min11=nums[i];
									}
				else if(nums[i]<min12)
				{
    
    
					min12=nums[i];
				}
			}
			else if(nums[i]%3==2)
			{
    
    
				if(nums[i]<min21)
				{
    
    
					min22=min21;
					min21=nums[i];
				}
				else if(nums[i]<min22)
				{
    
    
					min22=nums[i];
				}
			}
		}
		System.out.println(min11);
		System.out.println(min12);
		System.out.println(min21);
		System.out.println(min22);
        
		if(sum%3==1)
		{
    
    
			if(min21!=Integer.MAX_VALUE&&min22!=Integer.MAX_VALUE)
			{
    
    
				if(min21+min22<min11)
				{
    
    
					sum=sum-min21-min22;
				}
                else {
    
    
				sum=sum-min11;
			     }
			}
			else {
    
    
				sum=sum-min11;
			}
			return sum;
		}
		if(sum%3==2)
		{
    
    
			if(min11!=Integer.MAX_VALUE&&min12!=Integer.MAX_VALUE)
			{
    
    
				if(min11+min12<min21)
				{
    
    
					sum=sum-min11-min12;
				}
                else {
    
    
				sum=sum-min21;
			     }

			}
			else {
    
    
				sum=sum-min21;
			}
			return sum;
		}
		return sum;
    }
}

评价:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BZG5pgN-1587433773950)(2912A46CBA8244699B40CB35D74928DC)]

猜你喜欢

转载自blog.csdn.net/hch977/article/details/105651329