zoukankan      html  css  js  c++  java
  • LeetCode-492

     Construct the Rectangle

    For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangular web page’s area, your job by now is to design a rectangular web page, whose length L and width W satisfy the following requirements:

    1. The area of the rectangular web page you designed must equal to the given target area.
    
    2. The width W should not be larger than the length L, which means L >= W.
    3. The difference between length L and width W should be as small as possible.
    Input: 4
    Output: [2, 2]
    Explanation: The target area is 4, and all the possible ways to construct it are [1,4], [2,2], [4,1]. 
    But according to requirement 2, [1,4] is illegal; according to requirement 3,  [4,1] is not optimal compared to [2,2].
    So the length L is 2, and the width W is 2.
    第一种解法也是我第一时间想到的解法:让area依次除area到sqrt(area),找到其中乘数相差最小的。
    java代码:
    public class Solution {
        public int[] constructRectangle(int area) {
            int[] arr=new int[]{area,1};
    		if(area<=0){
    			arr[0]=0;
    			arr[1]=0;
    			return arr;
    		}
            for(int i=area;i>=Math.sqrt(area);i--){
                if(area%i==0){
                	if(i>=area/i&&(i-area)<(arr[0]-arr[1])){
                		arr[0]=i;
                		arr[1]=area/i;
                	}
                }
            }
        
            return arr;
        }
    }
    

      下面介绍一种效率更高的方法,那就是area除以一个比sqrt(area)小一点点的数,如果商为零,那么就是乘数相差最小的,也是长大于宽的。

    public class Solution {
        public int[] constructRectangle(int area) {
            int[] result = new int[2];
            if(area == 0){
                return result;
            }
            int a = (int)Math.sqrt(area);
            while(area%a != 0){
                a--;
            }
            int b = area/a;
            result[0] = b;
            result[1] = a;
            return result;
        }
    }
    

      

  • 相关阅读:
    区间DP入门
    Prime Permutation(思维好题 )
    小字辈 (bfs好题)
    博弈论小结之尼姆博弈
    Hometask
    Lucky Sum (dfs打表)
    对称博弈
    尼姆博弈
    莫队算法 ( MO's algorithm )
    Codeforces 988D Points and Powers of Two ( 思维 || 二的幂特点 )
  • 原文地址:https://www.cnblogs.com/lcbg/p/6560446.html
Copyright © 2011-2022 走看看