第194场周赛

这次周赛比较惨,只做出了第一个题目。最终排名1700+

1486. 数组异或操作

第一个题目比较简单,就是去模拟异或的过程即可。

class Solution 
{
public:
    int xorOperation(int n, int start) 
	{
		vector<int> nums;
		
		for(int i = 0;i < n;i++)
		{
			nums.push_back(start + 2 * i);
		}
		int ans = 0;	
		for(int i = 0;i < n;i++)
		{
			ans = ans ^ nums[i];
		}
		
		return ans;
    }
};

1487. 保证文件名唯一

第二个题目我一开始的想法是用暴力解法,写出代码之后发现超时了。

暴力解法的代码:

class Solution 
{
public:
    vector<string> getFolderNames(vector<string>& names) 
	{
		vector<string> ans;
		
		unordered_set<string> s;
		
		for(int i = 0;i < names.size();i++)
		{
			const string str = names[i];
			string temp = str;
			int count = 1;
			
			while(s.find(temp) != s.end())
			{
				temp = str + "(" + to_string(count) + ")";
				count++;
			}
			s.insert(temp);
			ans.push_back(temp);
		}
		
		return ans;
    }
};

这个题目的优化思路还是比较好想的,用一个unordered_map来记录文件名和文件名出现的次数,当查询到文件名已经在哈希表中时,不用从1开始逐渐递增,只要从unordered_mapvalue值开始递增。

思路比较好想,但是代码实现上,我总是写不出来,最后看了闫神的代码才写出来。

class Solution 
{
public:
    vector<string> getFolderNames(vector<string>& names) 
    {
        unordered_set<string> hash;
        unordered_map<string,int> cnt;  //key 是文件名 value是出现次数
        vector<string> ans;

        for(auto str : names)
        {
            string suc;
            int k = 0;

            if(cnt.count(str))
            {
                k = cnt[str];
            }

            while(hash.count(str + suc))
            {
                k++;
                suc = "(" + to_string(k) + ")";
            }
            cnt[str] = k;
            hash.insert(str + suc);
            ans.push_back(str + suc);
        }

        return ans;
    }
};
posted @ 2020-06-21 22:10  尚修能的技术博客  阅读(154)  评论(0编辑  收藏  举报