算法也要面向对象OO

2023-11-05

直接去模糊的去写,通过调试,一步步改,就算最后写出来了也不知道怎么写出来的。一定要先有整体思路。

面向操作会很凌乱,算法也要面向对象,识别出变量,定义有确切含义的变量,以及这边变量之间互动的关系,时刻维护变量意义的正确性,也就是invariant 

控制驱动就是自增的循环变量


一个例题:压缩字符串,把形如aaabbcdd的字符串压缩成a3b2cd2,只连续出现一次的字符后不跟count,

识别对象:新字符串写入指针i, 源字符串读取指针j, 新字符串最后一个字符的出现次数count, 

互动关系:当前字符s[j] 不等于新字符串最后一个字符,count 写入新字符串末尾,同时当前字符写入新字符串末尾,count 置为1;当前字符和新字符串最后一个字符相同,累加count。新字符串最后一个字符的count何时写入由当前字符决定。最后一个count需要单独写入,因为没有触发它的事件。


算法的正确思考方式就是要分析出这些变量和他们之间的互动关系,而不是乱想。

string compress(string &s) {
	string t;
	int count = 0;
	for (int j = 0; j < s.size(); ++j) {
		if (t.empty() || s[j] != t.back()) {
			if (count > 1) t.append(to_string(count));
			t.push_back(s[j]);
			count = 1;
		}
		else ++count;
	}
	if (count > 1) t.append(to_string(count));
	return t;
}



int compress2(string &s) {
	int count = 0, i = 0;
	for (int j = 0; j < s.size(); ++j) {
		if (i == 0 || s[j] != s[i - 1]) {
			if (count > 1) {
				auto countStr = to_string(count);
				for (char c : countStr) s[i++] = c;
			}
			s[i++] = s[j];
			count = 1;
		}
		else ++count;
	}
	if (count > 1) {
		auto countStr = to_string(count);
		for (char c : countStr) s[i++] = c;
	}
	return i;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法也要面向对象OO 的相关文章

随机推荐

  • Java—面向对象——类与对象

    目录 一 现有技术解决问题 二 类与对象的关系示意图 三 类和对象的关系与区别 四 对象在内存中的存在形式 五 属性 成员变量 字段 六 如何创建对象 七 如何访问属性 一 现有技术解决问题 单独的定义变量解决 缺点 不利于数据的管理 使用
  • PyCharm连接Docker中的容器(ubuntu)

    一 为什么要用Pycharm链接Docker中的ubuntu 因为在进行深度学习的时候 基于windows系统在开发的过程中 老是出现很多问题 大多数是环境问题 尽管安装了Conda 也不能很好的解决问题 使用ubuntu是最好的选择 二
  • tar命令如何解压指定文件到指定目录下

    举一个例子 解压 a tar gz 包里文件名以 one 开头的文件到 tmp 文件夹下 tar xzv C tmp f a tar gz one
  • FBXSDK2018 plugin for Unity

    1 下载FBXSDK 点击打开链接 2 安装SDK 记住你所安装的目录 3 visualstudio 新建 C 空项目 首先配置 C C 附加包含目录 你安装sdk 路径下的include 4 设置预处理器 假设是Debug x64 WIN
  • 原地逆转链表的多种方案

    原地逆转链表的多种方案 include
  • 正大期货:期货交易规则和操作方法?

    1 实行t 0的交易方式 即投资者当天买入的期货 在当天就能卖出 2 双向交易 即投资者可以进行做多操作 也可以进行做空交易 3 保证金制度 即投资者交易期货需要交纳一定比例的保证金 4 强制平仓制度 即当投资者的保证金不足时 期货公司为了
  • java获取微信用户信息(UnionID)

    本篇主要是针对用户关注公众号 然后利用接口获取用户的信息包括unionid信息 首先就是获取微信access token的值 官方文档 https mp weixin qq com wiki t resource res main id m
  • rockchip rk3368(px5)车载开发之路2,屏幕正常显示(不对的地方是UI)

    本系列记载作者来到一个新的车载后装市场小公司 负责从新开始维护一套代码的心路过程 系统使用瑞芯微的rk3368芯片 版本是PX5 Android 8 0 release 20180726 从无到有的每个patch修改以及思考 其中着重点是驱
  • 不好意思,list.contain 去重该换换了!

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 3 5 分钟 来自 blog csdn net qq 35387940 article details 129885310 最近又是一轮代码review 发现了一些实
  • 法宣在线积分小程序python学满指定分钟数自动关闭

    微信 法宣在线积分学习小程序 可自动学 有不明白的可以联系我 这种只是辅助 不能一天刷很多 比如一天100多分就可以了不要太多 不然会被查 如果没电脑的 可以发账号给我 我把法宣在线的账号登录上每天自动积分就可以了 电脑端exe 打包下载
  • Memcached简单介绍

    介绍 Memcached 是一个高性能的分布式内存对象缓存系统 用于动态Web应用以减轻数据库负载 它通过在内存中缓存数据和对象来减少读取数据库的次数 从而提高动态 数据库驱动网站的速度 Memcached基于一个存储键 值对的hashma
  • flutter 导出iOS问题2

    问题1 The Swift pod FirebaseCoreInternal depends upon GoogleUtilities which does not define modules To opt into those targ
  • Vue 之 Toast 消息提示插件的简单封装

    Vue 之 Toast 消息提示插件的简单封装 目录 Vue 之 Toast 消息提示插件的简单封装 一 简单介绍 二 实现原理 三 注意事项 四 效果预览 五 实现 六 项目源码 一 简单介绍 Vue 开发的一些知识整理 方便后期遇到类似
  • vue 报错:Cannot read property 'xxx' of undefined",但是页面能渲染上数据

    有时候会遇到给页面绑定数据的时候 可以绑定成功 但vue warn xxx属性of undefined 如果本组件只是绑定简单的数据倒是可以忽略 如果本组件还引入了其他组件或第三方组件 插件 则就渲染不出来 就需要解决了
  • SQL WHERE语句

    文章目录 WHERE基础语法 WHERE AND OR WHERE ORDER BY ORDER BY ORDER BY ASC DESC ORDER BY 多列 WHERE基础语法 SELECT FROM table name WHERE
  • npm run dev 报错:missing script:dev

    在 npm run dev 或 npm start 报错 打开package js 发现没有script 里面的内容 本应该有如图内容 解决方法 1 vue init webpack package js文件中会添加内容 2 npm run
  • C# ThreadPool 线程池

    线程 被定义为程序的执行路径 每个线程都定义了一个独特的控制流 如果您的应用程序涉及到复杂的和耗时的操作 那么设置不同的线程执行路径往往是有益的 每个线程执行特定的工作 线程是轻量级进程 一个使用线程的常见实例是现代操作系统中并行编程的实现
  • IPv4地址分类(A类 B类 C类 D类 E类)

    5类地址 A类 B类 C类 D类 E类 IPv4地址由四段组成 每个字段是一个字节 8位 最大值是255 IPv4地址由两部分组成 即网络地址和主机地址 网络地址表示其属于互联网的哪一个网络 主机地址表示其属于该网络中的哪一台主机 二者是主
  • 在windows上配置git支持多账号

    1 背景 现在大多数人都采用git进行版本管理 在git下面进行开发被越来越多的程序员所接受 还有越来越多的人参与开源社区的建设 现在有一个问题就是 在windows环境下 如何在git客户端上通过ssh key的方式配置多个账号 不需要输
  • 算法也要面向对象OO

    直接去模糊的去写 通过调试 一步步改 就算最后写出来了也不知道怎么写出来的 一定要先有整体思路 面向操作会很凌乱 算法也要面向对象 识别出变量 定义有确切含义的变量 以及这边变量之间互动的关系 时刻维护变量意义的正确性 也就是invaria