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; } }