从零开始的力扣刷题记录-第八十一天

本文介绍了四道力扣编程题的解决方案,涉及字符串处理,找到数组的中间位置,删除排序链表中的重复元素以及颜色分类问题。题目难度从简单到中等,提供了Go语言的实现代码。
摘要由CSDN通过智能技术生成

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++
            }
        }
    }
}

总结

今天四道题依然比较简单,这两天先虐虐菜缓解一下动态规划的阴影

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值