題意:
給你兩個長度相等的整數陣列,返回下面表示式的最大值:
|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|
其中下標i
,j
滿足0 <= i, j < arr1.length
。
思路:根據數學思想,對於絕對值符號內的表示式( i > j ),共有四種可能
(1)arr1[i] > arr1[j] , arr2[i] > arr2[j]:arr1[i] - arr1[j] + arr2[i] - arr2[j] + i - j = ( arr1[i] + arr2[i] + i ) - ( arr1[j] + arr2[j] + j )
(2)arr1[i] > arr1[j] , arr2[i] < arr2[j]:arr1[i] - arr1[j] - arr2[i] + arr2[j] + i - j = ( arr1[i] - arr2[i] + i ) - ( arr1[j] - arr2[j] + j )
(3)arr1[i] < arr1[j] , arr2[i] > arr2[j]:- arr1[i] + arr1[j] + arr2[i] - arr2[j] + i - j = ( - arr1[i] + arr2[i] + i ) - ( - arr1[j] + arr2[j] + j )
(4)arr1[i] < arr1[j] , arr2[i] < arr2[j]:- arr1[i] + arr1[j] - arr2[i] + arr2[j] + i - j = ( - arr1[i] - arr2[i] + i ) - ( - arr1[j] - arr2[j] + j )
對於每一組(i,j),表示式的值必然屬於上面四種情況的一種,並且所得到的值是四種情況中最大的,因此我們可以掃一遍陣列,用當前值減去之前最小的值,再取乙個最大值,就是所求的答案。
**:const int n=4e4+10;
class solution
else
}return ans;}};
1131 絕對值表示式的最大值
題目描述 給你兩個長度相等的整數陣列,返回下面表示式的最大值 arr1 i arr1 j arr2 i arr2 j i j 其中下標 i,j 滿足 0 i,j arr1.length。示例 1 輸入 arr1 1,2,3,4 arr2 1,4,5,6 輸出 13 示例 2 輸入 arr1 1,2,...
絕對值相關
abs 是如何來求絕對值的並且看看它的效率如何,所以反彙編出來看了下 sar 0x1f,edx xor edx,eax sub edx,eax 對應c語言 求int a的絕對值 b a 31 a a b a a b 起初還沒想透為什麼這樣就能得到絕對值,再細想,對右移理解有誤 微機原理忘光了,汗顏 ...
絕對值排序
輸入n n 100 個整數,按照絕對值從大到小排序後輸出。題目保證對於每乙個測試例項,所有的數的絕對值都不相等。輸入資料有多組,每組佔一行,每行的第乙個數字為n,接著是n個整數,n 0表示輸入資料的結束,不做處理。對於每個測試例項,輸出排序後的結果,兩個數之間用乙個空格隔開。每個測試例項佔一行。3 ...