第一场力扣周赛

8 篇文章 0 订阅

第一场力扣周赛(339场周赛)

写在前面

第一场参加力扣周赛,还是比较好奇和兴奋的,不过我是看别人做我才做的,可能开始的时候已经过了一二十分钟了,但是总体还好,做出来了三道题,题目和代码如下

6362.最长平衡子字符串

题目:

image-20230402151501868

思路:

有点类似于最长回文子串,我们直接从i开始遍历左右如果左边i的位置是0,右边j的位置是0就让i–,j++

代码:
func findTheLongestBalancedSubstring(s string) int {
	res := 0
	n := len(s)
	for i := 1; i < n; i++ {
		res = max(res, dfs(s, i-1, i))
	}
	return res
}

func dfs(a string, i, j int) int {
	for i >= 0 && j < len(a) && a[i] == '0' && a[j] == '1' {
		i--
		j++
	}
	return j - i - 1
}

func max(i, j int) int {
	if i > j {
		return i
	}
	return j
}

6363.转换二维数组

题目:

image-20230402152039469

思路:

先排序,然因为要求每一行都有不重复的,所以统计出最多的那个元素的个数,每一行都必须有那个元素,然后其他随意排就行了,注意:如果使用元素之后元素size要–

代码:
func findMatrix(nums []int) [][]int {
	temp := make([]int, 210)
	n := len(nums)
	for i := 1; i <= n; i++ {
		temp[nums[i-1]]++
	}
	count := 0
	for i := 1; i <= n; i++ {
		count = max(count, temp[i])
	}
	res := [][]int{}
	for count > 0 {
		t := []int{}
		for i := 1; i <= n; i++ {
			if temp[i] != 0 {
				t = append(t, i)
				temp[i]--
			}
		}
		res = append(res, t)
		count--
	}
	return res
}

func max(i, j int) int {
	if i > j {
		return i
	}
	return j
}

6364.老鼠和奶酪

题目:

image-20230402152239612

思路:

因为要恰好吃掉k块奶酪,所以我们希望取出reward1[i]-reward2[i]最大的前k个数,其他数则按原样输出

代码:
func miceAndCheese(reward1 []int, reward2 []int, k int) int {
	res := 0
	n1 := len(reward1)
	n2 := len(reward2)
	if k == 0 {
		for i := 0; i < n2; i++ {
			res += reward2[i]
		}
		return res
	} else if k == n2 {
		for i := 0; i < n1; i++ {
			res += reward1[i]
		}
		return res
	}

	dif := make([]int, n1)
	for i := 0; i < n1; i++ {
		dif[i] = reward1[i] - reward2[i]
	}

	for i := 0; i < n1; i++ {
		min := 0
		if reward1[i] < reward2[i] {
			min = reward1[i]
		} else {
			min = reward2[i]
		}
		res += min
	}

	//记录下标
	sort.Ints(dif)
	for i := 0; i < n1; i++ {
		if i < n1-k {
			if dif[i] > 0 {
				dif[i] = 0
			}
			res += -dif[i]
		} else {
			if dif[i] < 0 {
				dif[i] = 0
			}
			res += dif[i]
		}
	}

	return res

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值