2129. 将标题首字母大写-简单
题目描述:
给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :
如果单词的长度为 1 或者 2 ,所有字母变成小写。
否则,将单词首字母大写,剩余字母变成小写。
请你返回 大写后 的 title 。
题解:
按题意模拟即可,主要考察strings的API
代码(Go):
func capitalizeTitle(title string) string {
a := strings.Split(title, " ")
for i, s := range a {
a[i] = strings.ToLower(s)
if len(s) > 2 {
a[i] = strings.Title(a[i])
}
}
return strings.Join(a, " ")
}
1991. 找到数组的中间位置-简单
题目描述:
给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。
中间位置 middleIndex 是满足 nums[0] + nums[1] + … + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + … + nums[nums.length-1] 的数组下标。
如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0 。
请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1 。
题解:
用一个变量记录数组和一个记录左边部分的和就可以很容易的比较两边的数值是否相等了
代码(Go):
func findMiddleIndex(nums []int) int {
sum := 0
for _,v := range nums{
sum += v
}
low := 0
for i,v := range nums{
if low == (sum - v - low){
return i
}else{
low += v
}
}
return -1
}
82. 删除排序链表中的重复元素 II-中等
题目描述:
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
题解:
和留下每种节点各一个的区别就是重复全删除,所以要保留前一个结点,令当前节点的下一个节点和下下个节点相比较
代码(Go):
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil {
return nil
}
temphead := &ListNode{0, head}
p := temphead
for p.Next != nil && p.Next.Next != nil {
if p.Next.Val == p.Next.Next.Val{
temp := p.Next.Val
for p.Next != nil && p.Next.Val == temp{
p.Next = p.Next.Next
}
}else{
p = p.Next
}
}
return temphead.Next
}
75. 颜色分类-中等
题目描述:
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
题解:
使用一个变量记录排序好的数组位置,每次遍历是一个颜色放到相应位置即可
代码(Go):
func sortColors(nums []int) {
p := 0
for i := 0;i < 3;i++{
for p < len(nums) && nums[p] == i{
p++
}
for j := p + 1;j < len(nums);j++{
if nums[j] == i{
nums[p],nums[j] = nums[j],nums[p]
p++
}
}
}
}
总结
今天四道题依然比较简单,这两天先虐虐菜缓解一下动态规划的阴影