1. 程式人生 > >LeetCode TwoSum 最優

LeetCode TwoSum 最優

class Solution {     public int[] twoSum(int[] nums, int target) {         final int il = nums.length;         int il2 = (il >> 2) - 1;

        int pot = 2;         while((il2 >>= 1) > 0) pot <<= 1;         final int bitMod = pot - 1;         final int[] bucket = new int[pot];         final int[] linked = new int[il];

        final int firstVal = nums[0];

        for (int i = 1; i < il; i++) {             int currNum = nums[i];             int complement = target - currNum;

            if (complement == firstVal) {                 return new int[] { 0, i };             }

            int complementLLIndex = bucket[complement & bitMod];             while(complementLLIndex != 0) {                 if(nums[complementLLIndex] == complement) {                     //Found                     return new int[] { complementLLIndex, i };                 }                 complementLLIndex = linked[complementLLIndex];             }             int currNumLLIndex = currNum & bitMod;             linked[i] = bucket[currNumLLIndex];             bucket[currNumLLIndex] = i;         }         return null;       } }