請程式大師進來幫我一下

作者: oin1104 (是oin的說)   2023-12-24 17:46:14
https://leetcode.com/problems/maximum-square-area-by-removing-fences-from-a-fiel
d/description/
題目:
在一堆竿子圍成的矩形
移除中間任意竿子
所能做出的最大正方形
我的解法:
只要在意差距形成的寬
我把橫的的竿子的差距算出來放進hashtable裡面
然後再用直的竿子的差距查hashtable 裡面的值是否存在
找出最大的正方形回傳
問題:
測資的值太大的話不知道為什麼會TLE
值多的話好像還好
我想知道我錯在哪裡
這題時間限制也太雞巴了吧
int cmp (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int maximizeSquareArea(int m, int n, int* hFences, int hFencesSize, int* vFences
, int vFencesSize)
{
long long ans = -1;
int ans1 = -1;
int h[hFencesSize+2];
for(int i = 0 ; i < hFencesSize ; i ++)
{
h[i] = hFences[i];
}
h[hFencesSize] = 1;
h[hFencesSize+1] = m;
int v[vFencesSize+2];
for(int i = 0 ; i < vFencesSize ; i ++)
{
v[i] = vFences[i];
}
v[vFencesSize] = 1;
v[vFencesSize+1] = n;
int dl = 0;
int dr = hFencesSize+1;
int d = 0;
int dmap[2181271]={};
int dm = 0;
for(int i = 0 ; i < hFencesSize+2 ; i++)
{
for(int j = i ; j < hFencesSize+2 ; j++)
{
int height = abs(h[i] - h[j]);
int key = height%(2181271);
int keys = key;
if(dmap[key] == 0 )
{
dmap[key] = height;
continue;
}
while(1)
{
if((dmap[key] == height) || (dmap[key] == 0 ))
{
dmap[key] = height;
break;
}
else
{
key += keys;
if(key >= 2181271)
{
key -= 2181271;
}
}
}
}
}
for(int i = 0 ; i < vFencesSize+2 ; i++)
{
for(int j = i ; j < vFencesSize+2 ; j++)
{
int width = abs(v[i] - v[j]);
int key = width%(2181271);
int keys = key;
while(1)
{
if( dmap[key] == width )
{
long long ans2 = ((long long)dmap[key]) * ((long long)dmap[k
ey]);
if(ans2 > ans)
{
ans = ans2;
}
break;
}
else if (dmap[key] == 0 )
{
break;
}
else
{
key += keys;
if(key >= 2181271)
{
key -= 2181271;
}
}
}
}
}
ans1 = ans %1000000007;
if(ans1 == 0 )
{
return -1;
}
return ans1;
}
好想打手槍
作者: Rushia (みけねこ的鼻屎)   2023-12-24 17:49:00
m和n最大長度是10^9 兩個FOR一定會超時
作者: sustainer123 (caster)   2023-12-24 17:49:00
降低時間複雜度
作者: Rushia (みけねこ的鼻屎)   2023-12-24 17:52:00
看錯了是600 600兩個迴圈是還好
作者: oin1104 (是oin的說)   2023-12-24 17:52:00
他的mn 就竿子數量 是600欸應該沒事 對ㄚ
作者: Rushia (みけねこ的鼻屎)   2023-12-24 17:53:00
那就是你中間的運算過程太浪費時間了
作者: oin1104 (是oin的說)   2023-12-24 17:53:00
我流淚了
作者: devilkool (對貓毛過敏的貓控)   2023-12-24 17:54:00
今天週賽那個嗎 你兩個for裡面又有while耶
作者: oin1104 (是oin的說)   2023-12-24 17:55:00
對 周賽 我那個while是為了hashtable兩個for應該不會超過600*600 再多*一個找hashtable 的應該不會太久 八

Links booklink

Contact Us: admin [ a t ] ucptt.com