LeetCode热题100道-Day01
- 使用map来存储数组的值与下标,然后遍历一遍目标数组,当遍历的数组的当前值存在与map中的值相加和为target时。说明该两数和符合题目要求,返回相应下标即可。
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for i:=0; i<len(nums); i++ {
sum := target - nums[i]
if v,ok := m[sum];ok {
return []int{v, i}
}
m[nums[i]] = i
}
return []int{-1, -1}
}
- 同时遍历两个链表,若链表为nil则需要补0,然后累加,并进位即可。记得最后还要补充、判断最后一位是否存在进位
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
res := new(ListNode)
p := res
temp := 0
for l1!=nil || l2!=nil {
var t1,t2 int
if l1==nil {
t1 = 0
} else {
t1 = l1.Val
l1 = l1.Next
}
if l2==nil {
t2 = 0
} else {
t2 = l2.Val
l2 = l2.Next
}
sum := t1+t2+temp
value := sum%10
temp = sum/10
p.Next = &ListNode{Val:value}
p = p.Next
}
if temp!=0 {
p.Next = &ListNode{Val:temp}
}
return res.Next
}
func lengthOfLongestSubstring(s string) int {
if len(s) == 0 {
return 0
}
res := 0
l := 0
r := 1
m := make(map[interface{}]int)
m[s[0]] = 0
for ; r < len(s); r++ {
if v, ok := m[s[r]]; ok {
if v > l {
l = v
}
l++
}
max := r - l + 1
if max > res {
res = max
}
m[s[r]] = r
}
return res
}
func longestPalindrome(s string) string {
resCount := 0
res := ""
for i:=0; i<len(s); i++ {
temp := ""
if i>0 {
temp = isPalindrome(s, i-1, i)
if len(temp)>resCount {
resCount = len(temp)
res = temp
}
}
temp = isPalindrome(s, i, i)
if len(temp)>resCount {
resCount = len(temp)
res = temp
}
}
return res
}
func isPalindrome(s string, l, r int) string{
if s[l]!=s[r] {
return ""
}
for l-1>=0 && r+1<len(s) {
if s[l-1]==s[r+1] {
l--
r++
} else {
break
}
}
return s[l:r+1]
}
func isValid(s string) bool {
stack := []byte{}
for i := 0; i < len(s); i++ {
c := s[i]
if c == '{' || c == '(' || c == '[' {
stack = append(stack, c)
} else {
if len(stack) == 0 {
return false
}
top := stack[len(stack)-1]
if (top == '(' && c == ')') ||
(top == '[' && c == ']') ||
(top == '{' && c == '}') {
stack = stack[:len(stack)-1]
} else {
return false
}
}
}
if len(stack) == 0 {
return true
} else {
return false
}
}