力扣202周赛题

//1550 存在连续三个奇数的数组 
bool threeConsecutiveOdds(vector<int>& arr) {
    for(int i = 0 ; i + 2 < arr.size() ; i++)
    {
        if(arr[i] % 2 && arr[i+1] % 2 && arr[i+2] %2)
            return true;
    }
    return false;      
}

//1551 使数组中所有元素相等的最小操作数
int minOperations(int n) {
    int res;
	if(n % 2)
	{
		res = (n * n - 1) / 4;
	}else
	{
		res = n * n  / 4;
	}	
	return res;
}


//1552 两个球之间的磁力
int maxDistance(vector<int>& a, int m) {
	sort(a.begin(),a.end());
	int l = 0 , r = 1e9;
	while( l < r)
	{
		int mid = l + r + 1 >> 1;
		int cnt = 1,last  = a[0];
		for(int i = 1 ; i < a.size(); i++)
		{
			if(a[i] - last >= mid)
			{
				cnt++;
				last = a[i];
			}
		}
		if(cnt >= m) l = mid;
		else r = mid - 1;
	}
	return r;	
} 


//1553 吃掉N个橘子
unordered_map<int,int> d;
queue<int> q;

void extend(int dist,int x)
{
	if(d.count(x))  return;
	d[x] = dist + 1;
	q.push(x);
}

int minDays(int n )
{
	q.push(n);	
	d[n] = 1;
	if(n == 1) return 1;
	while(q.size())
	{
		auto t = q.front();
		if(t == 1) return d[t];
		q.pop();
		extend(d[t],t-1);
		if(t % 2 == 0) extend(d[t],t / 2);
		if(t % 3 == 0) extend(d[t],t / 3);
	}
	
	return -1;
} 

posted @ 2020-08-26 22:23  Akmf's_blog  阅读(83)  评论(0)    收藏  举报