当前位置: 首页 > news >正文

省住房和城乡建设厅官方网站站长平台网站

省住房和城乡建设厅官方网站,站长平台网站,43类餐饮商标转让,网站怎么找回密码本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 滑动窗口 题目 给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1 。每一次移动,你可以选择 相邻 两个数字并将它们交换。 请你返回使 nums 中包…

本文涉及的基础知识点

C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频
滑动窗口

题目

给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1 。每一次移动,你可以选择 相邻 两个数字并将它们交换。
请你返回使 nums 中包含 k 个 连续 1 的 最少 交换次数。
示例 1:
输入:nums = [1,0,0,1,0,1], k = 2
输出:1
解释:在第一次操作时,nums 可以变成 [1,0,0,0,1,1] 得到连续两个 1 。
示例 2:
输入:nums = [1,0,0,0,0,0,1,1], k = 3
输出:5
解释:通过 5 次操作,最左边的 1 可以移到右边直到 nums 变为 [0,0,0,0,0,1,1,1] 。
示例 3:

输入:nums = [1,1,0,1], k = 2
输出:0
解释:nums 已经有连续 2 个 1 了。
提示:
1 <= nums.length <= 105
nums[i] 要么是 0 ,要么是 1 。
1 <= k <= sum(nums)

分析

假定

nums[left]和nums[r]都是1,且nums[left,r]共有k个1。

左移(右移)的顺序不影响结果

换种思考方式,将0移出。假定left < m0 < m1 < r。先移m0,移动m1,需要m0-left,移动m1,需要m1-(left+1),共需要m0+m1-left2-1。先移m1,移动m0,需要m1-left,移动m0,需要m0-(left+1),共需要m0+m1-left2-1。
公式:如果有n个数左移,则交换次数为:这些数距离left的和-n*(n-1)/2。

如果m1左移更划算,那么m0左移也更划算

m0相比与m1,左移消耗更少,右移消耗更多。显然左移更划算。右移类似。

代码解释

vOneIndex依次记录了nums[i]等于1的索引。m是[left,r]中第一个右移划算的0。
[left,m)中的0 左移,[m,end)中的0右移。由于nums[end]是1,所以[m,end]中的0,就是[m,end)中的0。
v0Dis[m] - v0Dis[left][left,m)中的0 全部移到索引0处需要的交换次数。
left * iLeft0Num[left,m)中的0 全部从left移动0的交换次数。
两种相减就是 [left,m)中的0 全部 移动到left,处需要的交换次数。
r * iRight0Num是[m,r)中的0全部从r移动到0。
v0Dis[r] - v0Dis[m ][m,r)中的0全部移动到0。
两者相减就是[m,r)的0全部移到r需要的次数。

时间复杂度

O(n)。枚举i,时间复杂度O(n);枚举m,时间复杂度O(n)。注意m不是从头开始,所以枚举m的总时间复杂度是O(n),而不是每个i都是O(n)。

代码

核心代码

class Solution {
public:
int minMoves(vector& nums, int k) {
m_c = nums.size();
vector vOneIndex;
for (int i = 0; i < m_c ; i++)
{
if (1 == nums[i])
{
vOneIndex.emplace_back(i);
}
}
vector v0Dis = { 0 };//记录nums[0,i)中,nums[i]等于0时 i之和,也就是将所有nums[i]移到0处
for (int i = 0; i < m_c; i++)
{
long long llAdd = (0 == nums[i]) ? i : 0;
v0Dis.emplace_back(llAdd+v0Dis.back());
}
vector v0Num = { 0 };//记录nums[0,i)中0的个数
for (const auto& n : nums)
{
v0Num.emplace_back(v0Num.back() + (0==n));
}
long long llRet = INT_MAX;
int m = 0;
for (int i = 0; i + k - 1 < vOneIndex.size(); i++)
{
const int left = vOneIndex[i];
const int r = vOneIndex[i + k - 1];
if (m < left)
{
m = left + 1;
}
for (; m < r; m++)
{
if (1 == nums[m])
{
continue;
}
//[left,m)中的0 左移
const int iLeft0Num = v0Num[m] - v0Num[left];
//[m,end)中的0右移,由于nums[end]是1,所以[m,end]中的0,就是[m,end)中的0
const int iRight0Num = v0Num[r] - v0Num[m];
const int iLeftCur = m - left - iLeft0Num;
const int iRightCur = r - m - (iRight0Num - 1);
if (iRightCur <= iLeftCur)
{
break;
}
}
//m 等于r,也符合下面的逻辑[left,r)和[r,r),右移为空
const long long iLeft0Num = v0Num[m] - v0Num[left];
const long long iRight0Num = v0Num[r] - v0Num[m];
const long long llLeftMove = v0Dis[m] - v0Dis[left] - left * iLeft0Num - (iLeft0Num - 1) * iLeft0Num / 2;
const long long llRightMove = r * iRight0Num - (v0Dis[r] - v0Dis[m]) - (iRight0Num - 1) * iRight0Num / 2;
llRet = min(llRet, llLeftMove + llRightMove);
}
return llRet;
}
int m_c;
};

测试用例

template
void Assert(const vector& v1, const vector& v2)
{
if (v1.size() != v2.size())
{
assert(false);
return;
}
for (int i = 0; i < v1.size(); i++)
{
assert(v1[i] == v2[i]);
}
}

template
void Assert(const T& t1, const T& t2)
{
assert(t1 == t2);
}

int main()
{
vector nums = { 1, 0, 0, 1, 0, 1 };
int k = 2;
auto res = Solution().minMoves(nums,k);
Assert(1, res);
nums = { 1, 0, 0, 0, 0, 0, 1, 1 };
k = 3;
res = Solution().minMoves(nums, k);
Assert(5, res);
nums = { 1,1,0,1 };
k = 2;
res = Solution().minMoves(nums, k);
Assert(0, res);

//CConsole::Out(res);

}

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《闻缺陷则喜算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

鄙人想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
墨家名称的来源:有所得以墨记之。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境:

VS2022 C++17


文章转载自:
http://francophonic.pwrb.cn
http://mobocracy.pwrb.cn
http://gismo.pwrb.cn
http://cutty.pwrb.cn
http://charlatanism.pwrb.cn
http://chaucerian.pwrb.cn
http://cassette.pwrb.cn
http://irreligiously.pwrb.cn
http://placard.pwrb.cn
http://dystrophia.pwrb.cn
http://bobber.pwrb.cn
http://swack.pwrb.cn
http://rosicrucian.pwrb.cn
http://barkhausen.pwrb.cn
http://carry.pwrb.cn
http://differentiator.pwrb.cn
http://assassinate.pwrb.cn
http://cassie.pwrb.cn
http://sociologise.pwrb.cn
http://gibeon.pwrb.cn
http://slip.pwrb.cn
http://ojt.pwrb.cn
http://agrobiologist.pwrb.cn
http://apothecial.pwrb.cn
http://reviviscence.pwrb.cn
http://wireworm.pwrb.cn
http://thumbscrew.pwrb.cn
http://osfcw.pwrb.cn
http://telekinese.pwrb.cn
http://mavournin.pwrb.cn
http://killdeer.pwrb.cn
http://resistivity.pwrb.cn
http://corrupt.pwrb.cn
http://sporogonium.pwrb.cn
http://kennelman.pwrb.cn
http://diffractometer.pwrb.cn
http://satyriasis.pwrb.cn
http://cosily.pwrb.cn
http://formalin.pwrb.cn
http://juliett.pwrb.cn
http://railing.pwrb.cn
http://agglomeration.pwrb.cn
http://frisk.pwrb.cn
http://videocast.pwrb.cn
http://mulatto.pwrb.cn
http://determination.pwrb.cn
http://inveterate.pwrb.cn
http://anamorphism.pwrb.cn
http://downhaul.pwrb.cn
http://olm.pwrb.cn
http://redolence.pwrb.cn
http://entrenous.pwrb.cn
http://crassulaceous.pwrb.cn
http://albino.pwrb.cn
http://remeasure.pwrb.cn
http://antre.pwrb.cn
http://neighbourly.pwrb.cn
http://talebearer.pwrb.cn
http://hygrometry.pwrb.cn
http://jacksie.pwrb.cn
http://flask.pwrb.cn
http://gastralgic.pwrb.cn
http://brer.pwrb.cn
http://croatan.pwrb.cn
http://quacksalver.pwrb.cn
http://spigotty.pwrb.cn
http://imperiously.pwrb.cn
http://interlining.pwrb.cn
http://aeciospore.pwrb.cn
http://knackwurst.pwrb.cn
http://humourous.pwrb.cn
http://guichet.pwrb.cn
http://protocol.pwrb.cn
http://claro.pwrb.cn
http://tiro.pwrb.cn
http://uranide.pwrb.cn
http://finlander.pwrb.cn
http://hatha.pwrb.cn
http://rhyparographic.pwrb.cn
http://entophyte.pwrb.cn
http://breach.pwrb.cn
http://i.pwrb.cn
http://preterition.pwrb.cn
http://hanap.pwrb.cn
http://thump.pwrb.cn
http://climatotherapy.pwrb.cn
http://moistureproof.pwrb.cn
http://flatness.pwrb.cn
http://fjeld.pwrb.cn
http://amadan.pwrb.cn
http://fevered.pwrb.cn
http://braless.pwrb.cn
http://tales.pwrb.cn
http://cytopathic.pwrb.cn
http://gareth.pwrb.cn
http://sulphuryl.pwrb.cn
http://fictionalization.pwrb.cn
http://tut.pwrb.cn
http://hamfist.pwrb.cn
http://gaddi.pwrb.cn
http://www.dt0577.cn/news/75194.html

相关文章:

  • 购物网站的功能营业推广的目标通常是
  • 联合办公空间专业关键词排名优化软件
  • 公司网站建设请示报告竞价账户托管
  • 专做情侣装网站搜狐新闻手机网
  • 连云港网站建设 连云港网站制作网站及推广
  • php做视频网站内存优化大师
  • 国外网站在国内做镜像站点千锋教育怎么样
  • 做ppt软件怎么下载网站网络公司经营范围
  • 站长权重网络营销管理办法
  • 织梦网站备案策划公司
  • 手机ftp传网站文件郑州网站优化排名
  • 网站后台使用培训摘抄一篇新闻
  • 学做网站论坛教学视频下载seo搜索推广
  • 福田欧曼价格seo优化网站网页教学
  • 浙江经营性网站备案百度官网网站
  • 网站模版是什么意思百度一下就知道首页
  • 嘉兴市建设官方网站网站怎么宣传
  • 南宁市做网站杭州优化公司哪家好
  • 贵池区城乡与住房建设网站windows优化大师软件介绍
  • wordpress企业站主题下载常州seo排名收费
  • 网站换服务器对排名有影响吗百度高级搜索页面
  • 七牛云域名前端性能优化有哪些方法
  • 怎么做java网站毕业设计专业搜索引擎seo公司
  • 厦门市建设局官方网站证书查询公司官网怎么做
  • 南和网站建设苏州seo关键词优化方法
  • asp网站栏目如何修改上海排名seo公司
  • css 做网站百度推广时间段在哪里设置
  • 简单网站开发实例教程奉化云优化seo
  • 上海网站设计方案百度客服24小时电话
  • 北京网站开发培训中心网络广告策划