第一场力扣周赛

文章目录

    • 第一场力扣周赛(339场周赛)
      • 写在前面
      • 6362.最长平衡子字符串
        • 题目:
        • 思路:
        • 代码:
      • 6363.转换二维数组
        • 题目:
        • 思路:
        • 代码:
      • 6364.老鼠和奶酪
        • 题目:
        • 思路:
        • 代码:

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

写在前面

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

6362.最长平衡子字符串

题目:

第一场力扣周赛_第1张图片

思路:

有点类似于最长回文子串,我们直接从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.转换二维数组

题目:

第一场力扣周赛_第2张图片

思路:

先排序,然因为要求每一行都有不重复的,所以统计出最多的那个元素的个数,每一行都必须有那个元素,然后其他随意排就行了,注意:如果使用元素之后元素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.老鼠和奶酪

题目:

第一场力扣周赛_第3张图片

思路:

因为要恰好吃掉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

}

你可能感兴趣的:(Go,算法,leetcode,算法,数据结构)