492. Construct the Rectangle

xiaoxiao2021-02-28  59

问题描述:给定一个数字,返回一个由两个数字构成的数组。要求第一个数字大于第二个数字,且两个数字尽可能小。 思路:通过sqrt开方缩小遍历范围。 原答案:

public int[] constructRectangle(int area) { int[] res=new int[2]; Double begin=Math.sqrt(area); for(int i=begin.intValue();i<area;i++){ if(area%i==0){ int width=area/i; if(width>i){ res[0]=width; res[1]=i; return res; }else{ res[0]=i; res[1]=width; return res; } } } res[0]=area; res[1]=1; return res; }

最佳答案:

public int[] constructRectangle(int area) { int w = (int)Math.sqrt(area); while( area%w != 0 ) w--; return new int[]{ area/w, w }; }

很简洁,其次,由开方向下遍历要比由开方向上遍历要快。将原答案修改后如下:

public int[] constructRectangle(int area) { int[] res=new int[2]; Double begin=Math.sqrt(area); for(int i=begin.intValue();i>1;i--){ if(area%i==0){ int width=area/i; res[0]=width; res[1]=i; return res; } } res[0]=area; res[1]=1; return res; }

运行时间上已经和最佳答案一致了。

转载请注明原文地址: https://www.6miu.com/read-2626689.html

最新回复(0)