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)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章