毎日のリートコード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. 上から:ゼロ以外の数値
  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.3で割り切れる最大の合計

[外部リンク画像の転送に失敗しました。ソースサイトにリーチ防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-p9qicZOi-1587433773946)(50A01A6C6FE04DC28516554850C216A2)]

アイデア:

  1. 配列を1回トラバースし、配列の合計を計算し、3と残りの1を分割する2つの最小のものと、残りの3つを分割する最小の2つを保存します。
  2. 合計を3で割ることができる場合は、直接返します
  3. 合計が1のままの場合は、残りの2つの最小の2または残りの1の最小の1を減算します(どちらの部分が小さいかを確認してください)
  4. 合計が2のままの場合は、残りの1つのうち最小の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