【LeetCode第86场双周赛】复盘

竞赛地址如下:
第 86 场双周赛

这一次一共有四道题目,分别如下:

  1. 和相等的子数组
  2. 严格回文的数字
  3. 被列覆盖的最多行数
  4. 预算内的最多机器人数目

刚开始打开竞赛的时候,第一时间看了下四道题目,第一和第二基本属于送分题,第三题属于暴力求解,第四题常规性放弃~~

第一题

和相等的子数组

给你一个下标从 0 开始的整数数组 nums ,判断是否存在 两个 长度为 2 的子数组且它们的 和 相等。
注意,这两个子数组起始位置的下标必须 不相同 。

如果这样的子数组存在,请返回 true,否则返回 false 。

思路

在读完题目以后,没注意到子数组,所以 WA 了一次,导致罚时 5 min。

子数组是连续数组的一个切片(即占据连续位置),并且固有地保持元素的顺序。

例如:[1,2,3,4,5]
虽然 1 和 4 加起来也是5,但是不能算作子数组。而 [2,3] 是可以算作子数组的。当注意到这个以后,于是迅速的AC了。

class Solution {
    public boolean findSubarrays(int[] nums) {
        Set<Integer> result = new HashSet<>();
        for(int i = 1; i < nums.length; i++){
            if(result.contains(nums[i] + nums[i-1])){
                return true;
            } else {
                result.add(nums[i] + nums[i-1]);
            }
        }
        return false;
    }
}

第二题

严格回文的数字
如果一个整数 n 在 b 进制下(b 为 2 到 n - 2 之间的所有整数)对应的字符串 全部 都是 回文的 ,那么我们称这个数 n 是 严格回文 的。

给你一个整数 n ,如果 n 是 严格回文 的,请返回 true ,否则返回 false 。

如果一个字符串从前往后读和从后往前读完全相同,那么这个字符串是 回文的 。

思路

首先是定义了一个进制转换的方法,最后通过双指针判断是不是回文。

进制转换

private String build(int i,int n) {
    StringBuilder sb = new StringBuilder();
    while(n > 0){
        int remain = n % i;
        if(remain > 10){
            sb.append(remain - 'a');
        } else {
            sb.append(remain);
        }
        n = n / i;
    } 
    return sb.reverse().toString();
}

其实这里在紧致大于10 的时候,应该判断余树是否应该转成字母,但是考虑到只需要判断回文,所以没必要处理。

思路二

因为 n>=4,而且 n 是可以为 n-2的
那么就会产生一个问题,任意一个数将其转为 n-2 进制的数字,得到的结果一定是 12
所以一定是 false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值