|
发表于 7-26-2016 10:23 PM
|
显示全部楼层
Java Solution with two hashmap recording largest and smallest index for each unique number; h1 G: h3 G+ O: g- Q: u4 R2 N# m' ~
) {$ n5 ?% b Q: E# l
int maximumDistanceBetweenIndices(int[] nums) {
7 O! U& [& K* Y6 F7 K Map<Integer, Integer> num2SmallestIdx = new HashMap<>();' o% k8 `$ @6 e% ]2 I
Map<Integer, Integer> num2BiggestIdx = new HashMap<>();
1 ~% ^4 s: u4 M! Z3 M! R7 V6 T% K$ v for(int i = 0; i< nums.length; i++) {" M* P. R0 M& i$ ]) N& i
num2SmallestIdx.put(nums【i】, Math.min(i, num2SmallestIdx.getOrDefault(nums【i】, Integer.MAX_VALUE)));
* B' m3 C$ z* b& W! w# Q4 ]; ^6 p num2BiggestIdx.put(nums【i】, Math.max(i, num2SmallestIdx.getOrDefault(nums【i】, Integer.MIN_VALUE)));
) x( o$ Z6 w K, U1 ^) R0 Y }' q ?' ]% Z/ R9 B! y- B: f8 O: d
# S) j& Q7 K+ r6 x1 `
Arrays.sort(nums);' M4 y: [0 x* s; o2 k+ L
int maxDistance = -1, lastBiggestIdx = Integer.MIN_VALUE, lastNum = Integer.MIN_VALUE;
) ^, X& X9 u/ o9 R- S x for(int i = nums.length - 1; i >=0; i--) {
3 H( @. `3 o" a# w( E" T) \# @ if (lastNum == nums【i】) continue;
1 b% i4 |9 F9 z0 M! Q& }* U lastNum = nums【i】;+ v7 Y5 T, [+ K! i, r' f
int smallestIdx = num2SmallestIdx.get(nums【i】);+ @3 V7 [/ @4 N1 T
if (lastBiggestIdx >= 0) maxDistance = Math.max(maxDistance, Math.abs(lastBiggestIdx - smallestIdx));
2 A+ l9 `( W( P3 G lastBiggestIdx = num2BiggestIdx.get(nums【i】);! d& R1 X, x3 i* S5 [
}
0 F0 Q! j$ G' c. \' n8 L, t4 t; P$ c return maxDistance;
6 {! Y/ y4 @# f4 Q+ Q3 v }/ H8 U9 h# c! Y; \8 [
|
|