剑指 Offer 18. 删除链表的节点-简单
题目描述:
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动
题解:
基础题,没啥好说的
代码(Go):
func deleteNode(head *ListNode, val int) *ListNode {
p := head
if p.Val == val{
return p.Next
}
for p.Next != nil{
if p.Next.Val == val{
p.Next = p.Next.Next
break
}
p = p.Next
}
return head
}
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面-简单
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
题解:
一看题目描述就想到了快速排序,只需要一次遍历就可以原地调整数组,可以实现最优解
代码(Go):
func exchange(nums []int) []int {
l := len(nums)
if l == 0{
return nums
}
p,q := 0,l - 1
temp := 0
for p < q{
if nums[p]%2 == 0{
temp = nums[p]
nums[p] = nums[q]
nums[q] = temp
}else{
p++
}
if nums[q]%2 == 1{
temp = nums[q]
nums[q] = nums[p]
nums[p] = temp
}else{
q--
}
}
return nums
}
面试题 01.06. 字符串压缩-简单
题目描述:
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
题解:
遍历一次字符串,用两个变量分别记录当前字符和出现次数。
代码(Go):
func compressString(S string) string {
l := len(S)
if l == 0{
return S
}
str := ""
flag := 0
var temp byte
for i := 0;i < l;i++{
if S[i] != temp{
if flag != 0{
str = str + strconv.FormatInt(int64(flag),10)
}
temp = S[i]
str = str + string(S[i])
flag = 1
}else{
flag++
}
}
str = str + strconv.FormatInt(int64(flag),10)
if len(str) >= l{
return S
}
return str
}
344.反转字符串-简单
题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
题解:
双指针遍历一遍数组,前面那道快排的的究极弱化版
代码(Go):
func reverseString(s []byte) {
l := len(s)
p,q := 0,l - 1
var temp byte
for p < q{
temp = s[p]
s[p] = s[q]
s[q]= temp
p++
q--
}
return
}
总结
简单题之间亦有差距,这两天都没什么难度,可能是前天太难了让我缓缓