将近一年没刷题了,热题100又发生变化了,现在来试试水, 经典第一题还是两数之和 哈哈哈😄
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解答:
fun twoSum(nums: Array<Int>, target: Int): IntArray {
val array = IntArray(2)
val map = HashMap<Int, Int>()
for (i in nums.indices) {
if (map.containsKey(nums[i])) {
array[0] = map[nums[i]]!!
array[1] = i
return array
}
map[target - nums[i]] = i
}
return array
}
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
字母异位词 指字母相同,但排列不同的字符串
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
解答:
fun groupAnagrams(strs: Array<String>): ArrayList<List<String>> {
val map = HashMap<String, ArrayList<String>>()
for (s in strs) {
//字符串中的字符重排序
val sort = s.toCharArray().sorted().joinToString("")
if (map[sort] == null) { //利用has特性,初始化字符集合
map[sort] = ArrayList()
}
//利用has特性将当前字符填入到不同集合中
map[sort]?.add(s)
}
val list = ArrayList<List<String>>()
//便利map表,组装数据
map.forEach {
list.add(it.value)
}
return list
}
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) **的算法解决此问题。
示例 1:
输入: nums = [100,4,200,1,3,2]
输出: 4
解释: 最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入: nums = [0,3,7,2,5,8,4,6,0,1]
输出: 9
解答:
fun longestConsecutive(nums: IntArray): Int {
val sort = nums.sortedArray()
val map = HashMap<Int,Int>()
var max = 0
var count = 0
for (i in sort.indices) {
map[sort[i]] = sort[i] //利用has去重
if (i>0) {
if (map[sort[i - 1]]== sort[i]){ //前后相同元素,不记录+1
continue
}
if (map[sort[i - 1]]!! + 1 == sort[i]) { //前后元素相差1,记录
count++
} else {
//前后元素不同,重新计算
count = 1
}
}else{
count = 1
}
//取上一组连贯数 ,与下一组连贯数的最大值
max = if(count > max) count else max
}
return max
}
ok打完收工😬