1.两数之和
Java解法
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> record = new HashMap<>();
for(int i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (record.containsKey(temp)) {
return new int[]{record.get(temp), i};
}
record.put(nums[i], i);
}
return new int[]{};
}
}
Golang解法
func twoSum(nums []int, target int) []int {
record := make(map[int]int)
for i := 0; i < len(nums); i++ {
temp := target - nums[i]
value, ok := record[temp]
if ok {
return []int{value, i}
}
record[nums[i]] = i
}
return []int{}
}
2.字母异位词分组
Java解法
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs == null || strs.length == 0) {
return new ArrayList<>();
}
Map<String, List<String>> record = new HashMap<>();
for (String str : strs) {
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
String sortedStr = new String(charArray);
if (!record.containsKey(sortedStr)) {
record.put(sortedStr, new ArrayList<>());
}
record.get(sortedStr).add(str);
}
return new ArrayList<>(record.values());
}
}
Golang解法
func groupAnagrams(strs []string) [][]string {
record := make(map[string][]string)
for _, str := range strs {
charSlice := []rune(str)
sort.Slice(charSlice, func(i, j int) bool {
return charSlice[i] < charSlice[j]
})
sortedStr := string(charSlice)
record[sortedStr] = append(record[sortedStr], str)
}
result := make([][]string, 0, len(record))
for _, v := range record {
result = append(result, v)
}
return result
}
3.最长连续序列
Java解法
class Solution {
public int longestConsecutive(int[] nums) {
if (nums.length == 0) {
return 0;
}
Set<Integer> record = new HashSet<>();
for(int num : nums) {
record.add(num);
}
int result = 0;
for(int num : record) {
if(!record.contains(num - 1)) {
int currentNum = num;
int length = 1;
while (record.contains(currentNum + 1)) {
currentNum++;
length++;
}
result = Math.max(result, length);
}
}
return result;
}
}
Golang解法
func longestConsecutive(nums []int) int {
if len(nums) == 0 {
return 0
}
record := make(map[int]int)
for _, num := range nums {
record[num] = num
}
result := 0
for num, _ := range record {
if _, ok := record[num-1]; !ok {
currentNum := num
length := 1
_, isExist := record[currentNum+1]
for isExist {
currentNum++
length++
_, isExist = record[currentNum+1]
}
if result < length {
result = length
}
}
}
return result
}