码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 贪心算法-翻硬币


    问题描述
    小明正在玩一个“翻硬币”的游戏。

    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

    比如,可能情形是:**oo***oooo

    如果同时翻转左边的两个硬币,则变为:oooo***oooo

    现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

    我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

    输入格式
    两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

    输出格式
    一个整数,表示最小操作步数。

    样例输入1


    o****o****
    样例输出1
    5
    样例输入2
    o**o***o**
    o***o**o**
    样例输出2
    1

    思路

    贪心题。   我的思路是先对两个字符串进行比较,用数组记录下比较的结果,0表示字符相同,1表示字符不同。   用题目给的例子示范:

      比较结果为:

      1000010000

      翻动次数就是两个1之间的下标之差。   当然也有些复杂的情况,若比较结果为:

      101101100101

      你是直接翻动中间的两个“11”处的硬币再解决其它硬币呢(因为翻动相邻的两个硬币只算一次操作),还是按上面的规则依次计算呢?

      这道题“贪心”之处就在这里,事实上从左到右依次按上面蓝字的规则累加计数,就可求得最优结果。

    代码:

    1. import java.util.Scanner;
    2. public class FlipCoin {
    3. public static void main(String[] args) {
    4. Scanner input = new Scanner(System.in);
    5. String str1 = input.next();
    6. String str2 = input.next();
    7. char[] arr1 = str1.toCharArray();
    8. char[] arr2 = str2.toCharArray();
    9. int count = 0;
    10. for (int i = 0; i < arr2.length -1; i++) {
    11. if (arr1[i] != arr2[i]) {
    12. arr1[i] = arr2[i];
    13. if (arr1[i+1] =='*') {
    14. arr1[i+1] ='o';
    15. }else {
    16. arr1[i+1] ='*';
    17. }
    18. count++;
    19. }
    20. }
    21. System.out.println(count);
    22. }
    23. }
  • 相关阅读:
    LeetCode --- 1534. Count Good Triplets 解题报告
    各位程序员们,睡眠不足产生的后果超出你想象!
    Java 将Excel转为UOS
    记录 Overleaf 上 texlive 版本选择出现的 bug
    【解决问题】在SpringBoot中通过配置Swagger权限解决Swagger未授权访问漏洞
    【我的前端】CSS启示录:CSS写出超级美观的阴影效果
    java 企业工程管理系统软件源码 自主研发 工程行业适用
    Linux上:安装、网络配置
    这短短 6 行代码你能数出几个bug?
    微服务--alpha使用
  • 原文地址:https://blog.csdn.net/cqn2bd2b/article/details/127920917
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号