哈希set
最长连续子数组的长度
给定一个未排序的整数数组,找到最长的长度 连续的元素序列。 例如,给定 [100,4,200, 1,3,2 ],最长的连续元素 序列为 [1,2,3,4 ]。返回其长度: 4。 你的算法应该运行在O(n) 的复杂性。
public static int longestConsecutive(int[] nums){
final HashSet<Integer> mset=new HashSet<Integer>();
for(int i:nums)mset.add(i);
int longest=0;
for(int i:nums){
int length=1;
for (int j = i-1;mset.contains(j) ; --j) {
mset.remove(j);
++length;
}
for (int j=i+1;mset.contains(j) ; ++j) {
mset.remove(j);
++length;
}
longest=Math.max(longest,length);
}
return longest;
}
两数之和
给定一个整数数组,找到两个数字,使它们加起来 具体目标号码。 函数twoSum应该返回两个数字的索引,使得它们 添加到目标,其中index1必须小于index2。请注意 您返回的答案 (index1和index2) 不是从零开始的。 您可以假设每个输入都只有一个解决方案。
public static int[] twoSum(int[] nums,int target){
final HashMap<Integer,Integer> map=new HashMap<>();
for (int i = 0; i <nums.length ; i++) {
map.put(nums[i],i);
}
for (int i = 0; i <nums.length ; i++) {
final Integer v=map.get(target-nums[i]);
if(v!=null&&v>i){
return new int[]{i+1,v+1};
}
}
return null;
}