1.两数相加
- two-sum(easy)
Leetcode
解法1:双重循环
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
int temp = target - nums[i];
for(int j=i+1;j<nums.length;j++){
if(temp == nums[j]){
return new int[]{i,j};
}
}
}
return new int[]{};
}
}解法2:利用HashMap,将值作为key,索引作为value,存入Map,
循环遍历数组,当Map中的key是target-nums[i]的值的时候,返回当前的i和那个key的value
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> indexForNum = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(indexForNum.containsKey(target-nums[i])){
return new int[]{indexForNum.get(target-nums[i]),i};
}else{
indexForNum.put(nums[i],i);
}
}
return null;
}
}2.存在重复元素
- contains-duplicate(easy)
Leetcode
解法1:HashMap,判断是否包含当前值的key
class Solution {
public boolean containsDuplicate(int[] nums) {
HashMap m = new HashMap();
for(int i=0;i<nums.length;i++){
if(m.containsKey(nums[i])){
return true;
}else{
m.put(nums[i],i);
}
}
return false;
}
}解法2:HashSet,直接比较结束后的Set长度和nums的长度
class Solution {
public boolean containsDuplicate(int[] nums) {
HashSet s = new HashSet();
for(int i=0;i<nums.length;i++){
s.add(nums[i]);
}
return s.size()<nums.length;
}
}3.最长和谐序列
- Longest Harmonious Subsequence (Easy)
Leetcode
解法1:双重循环
解法2:将数组放到hashMap中,扫描一遍HashMap
class Solution {
public int findLHS(int[] nums) {
HashMap<Integer,Integer> m = new HashMap();
for(int num : nums){
m.put(num, m.getOrDefault(num, 0) + 1);
}
int res = 0;
for(int key : m.keySet()){
if(m.containsKey(key+1)){
res = Math.max(res,m.get(key)+m.get(key+1));
}
}
return res;
}
}
京公网安备 11010502036488号