918. 环形子数组的最大和;2531. 使字符串总不同字符的数目相等;1238. 循环码排列

918. 环形子数组的最大和

核心思想:其实这题不加环形很好做,就是一个动态规划或者贪心就能够解决。加了环形我们应该怎么考虑呢,无非就是两种,第1种是子数组只包含首尾的一个,我们直接求子数组的最大连续和即可,第2种是同时包含子数组的两个,然后你会发现除去最大和的部分其余部分的和为s = sum(nums)-最大和部分,那么为了使用最大和部分越大你的s肯定就要越小,所以我们只需要在维护一个最小和即可,然后取max(max和,sum(nums)-min和)。然后要特判一下最小和为sum(nums)的情况,因为子数组不能为空。

 2531. 使字符串总不同字符的数目相等

核心思想:枚举相交换的两个字母,当两个字母相同的时候,直接比较它们的不同字符数量。当两个字母不同的时候,不同字符数量怎样才能发生变化,即当一个字母在字符串中只有一个的时候,交换它,长度为减少1,当交换过来的字母不在当前字符串中的时候,长度为加1,所以判断两种情况即可。

 1238. 循环码排列

核心思想:格雷码的定义,这道题其实是一道知识增长的题目,对于一个二进制数,它的格雷码为(i>>1)^i,所以你将连续的二进制数转化为格雷码的时候,它的二进制表现满足题目,这题唯一的不同就是start,只需要每个数^上start即可。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值