918. 环形子数组的最大和
核心思想:其实这题不加环形很好做,就是一个动态规划或者贪心就能够解决。加了环形我们应该怎么考虑呢,无非就是两种,第1种是子数组只包含首尾的一个,我们直接求子数组的最大连续和即可,第2种是同时包含子数组的两个,然后你会发现除去最大和的部分其余部分的和为s = sum(nums)-最大和部分,那么为了使用最大和部分越大你的s肯定就要越小,所以我们只需要在维护一个最小和即可,然后取max(max和,sum(nums)-min和)。然后要特判一下最小和为sum(nums)的情况,因为子数组不能为空。
2531. 使字符串总不同字符的数目相等
核心思想:枚举相交换的两个字母,当两个字母相同的时候,直接比较它们的不同字符数量。当两个字母不同的时候,不同字符数量怎样才能发生变化,即当一个字母在字符串中只有一个的时候,交换它,长度为减少1,当交换过来的字母不在当前字符串中的时候,长度为加1,所以判断两种情况即可。
1238. 循环码排列
核心思想:格雷码的定义,这道题其实是一道知识增长的题目,对于一个二进制数,它的格雷码为(i>>1)^i,所以你将连续的二进制数转化为格雷码的时候,它的二进制表现满足题目,这题唯一的不同就是start,只需要每个数^上start即可。