相同元素
public static int[] intersection(int[] nums1, int[] nums2) {
Set temp=new HashSet<Integer>();
Set<Integer> result=new HashSet();
for (int item:nums1) {
temp.add(item);
}
for (int item:nums2) {
if(temp.contains(item)){
result.add(item);
}
}
return result.stream().mapToInt(Integer::intValue).toArray();
}
快乐数 集合
public static boolean isHappy(int n) {
HashSet a=new HashSet();
int sum=0;
while(true){
sum=0;
while (n>=1){
int temp=n%10;
sum+=temp*temp;
n=n/10;
}
n=sum;
if(sum==1){
return true;
}
if(a.contains(sum)){
return false;
}
a.add(sum);
}
}
两数之和 哈希表
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> restrict=new HashMap();
for (int key=0;key<nums.length;key++) {
restrict.put(nums[key],key);
}
for (int key=0;key<nums.length;key++) {
if(restrict.containsKey(target-nums[key]) && key!=restrict.get(target-nums[key])){
return new int[]{key,restrict.get(target-nums[key])};
}
}
return new int[]{};
}
三数之和 双指针
public static List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> result=new ArrayList<>();
for(int i=0;i<nums.length;i++){
if(nums[i]>0){
break;
}
if(i>=1&&nums[i]==nums[i-1]){
continue;
}
int left=i+1;
int right=nums.length-1;
while (left<right){
int sum=nums[i]+nums[left]+nums[right];
if(sum>0){
right--;
}
else if(sum<0){
left++;
}
else{
result.add(Arrays.asList(nums[i],nums[left],nums[right]));
while (right > left&&nums[left]==nums[left+1])left++;
while (right > left&&nums[right]==nums[right-1])right--;
right--;
left++;
}
}
}
return result;
}