leetcode菜鸡之路---周赛总结

  1. 检查整数及其两倍数是否存在

这道题为了快点a就使用的是暴力法,大致判断一下就可以了,但是其实是可以用hash的。

解题思路

暴力写法就不说了。可以写一个利用哈希表的。其中,key存储的是表中元素的两倍。然后在第二次遍历的时候可以直接查是否有对应的key。

代码


class Solution {

public:

    bool checkIfExist(vector<int>& arr) {

        multimap<int,int> mp;

        for(int i=0;i<arr.size();i++)

        {

            mp.insert(pair<int,int>(arr[i]*2,i));

            

        }

        for(int i=0;i<arr.size();i++)

        {if(mp.count(arr[i])&&(arr[i]!=0))return 1;}

        if(mp.count(0)>1)return 1;

        return 0;

    }

};

此外,还有先排好序,然后使用双指针的方法。事实上,对这样的两次遍历的问题,都可以考虑适用双指针的方式来减少算法的复杂度。

  1. 制造字母异位词的最小步骤数

其实这道题很容易可以想到来统计字符串的字母数。但是如何具体来统计对我来说就懵逼了。我刚开始想到了用map,实现字符和数量的映射关系。算是熟悉了一下map的使用:

1.map<char,int> mp;
2.mp.count(key);
3.mp.find(key);
4mp.insert(pair<char,int>(‘c’,2));

但是实际发现对方大佬实现这个很简单好吧。直接就是用一个数组就实现了。其中最为关键的想法就是字符和数字本来就可以对应。a-z对应的ascii值是不一样的,于是可以实现a-z和数字的对应。
即便a的码值不记得也可以(a是97,A是65),只要用字母减去‘a’即可得到字符的数值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值