2021-05-05:一个数组中只有两种字符’G’和’B’,可以让所有的G都放在左侧,所有的B都放在右侧。或者可以让所有的G都放在右侧,所有的B都放在左侧。但是只能在相邻字符之间进行交换操作。返回至少需要交换几次。

福大大 答案2021-05-05:

自然智慧即可。
所有G和所有B的相对顺序不变,交换次数一定是最少的。
相邻交换,类似于冒泡排序,而冒泡排序是稳定的。
把G全部移动到左边,记录次数step1;把B全部移动到左边,记录次数step2。返回值取step1和step2的最小值。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
s := "BBGGB"
ret := minSteps1(s)
fmt.Println(ret) ret = minSteps2(s)
fmt.Println(ret)
} // 一个数组中只有两种字符'G'和'B',
// 可以让所有的G都放在左侧,所有的B都放在右侧
// 或者可以让所有的G都放在右侧,所有的B都放在左侧
// 但是只能在相邻字符之间进行交换操作,请问请问至少需要交换几次,
func minSteps1(s string) int {
if len(s) == 0 {
return 0
}
step1 := 0
gi := 0
for i := 0; i < len(s); i++ {
if s[i] == 'G' {
step1 += i - gi
gi++
}
}
step2 := 0
bi := 0
for i := 0; i < len(s); i++ {
if s[i] == 'B' {
step2 += i - (bi)
bi++
}
}
return getMin(step1, step2)
} // 可以让G在左,或者在右
func minSteps2(s string) int {
if len(s) == 0 {
return 0
} step1 := 0
step2 := 0
gi := 0
bi := 0
for i := 0; i < len(s); i++ {
if s[i] == 'G' { // 当前的G,去左边 方案1
step1 += i - gi
gi++
} else { // 当前的B,去左边 方案2
step2 += i - bi
bi++
}
}
return getMin(step1, step2)
} func getMin(a int, b int) int {
if a < b {
return a
} else {
return b
}
}

执行结果如下:


左神java代码

2021-05-05:一个数组中只有两种字符‘G‘和‘B‘,可以让所有的G都放在左侧,所有的B都放在右侧。或者可以让所有的G都放在右侧,所有的B都放在左侧。但是只能在相邻字符之间进行交换操作。返回至少的更多相关文章

  1. C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy

    static void Main(string[] args) { , , , , , }; ;//目标数组大小 int int_size = sizeof(int);//用于获取值类型的字节大小. ...

  2. C语言:一个数组中只有两个数字是出现一次

    //1.一个数组中只有两个数字是出现一次, //其他所有数字都出现了两次. //找出这两个数字,编程实现.a //^=单独两个数的^结果 //单独出现的两个数不同位的标记 //position: ^结 ...

  3. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  4. 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题

    先看看这个题目:某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C代码求出这两个单身整数. 要求: 时间复杂度o(n), 空间复杂度o(1). 我们先用最傻瓜的方式来做吧: #inc ...

  5. 【leetcode】Merge Sorted Array(合并两个有序数组到其中一个数组中)

    题目: Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assum ...

  6. 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的. 这道题有很多烟雾弹: 首先如果有多对,最前面的两个数就是乘积最小的, ...

  7. 笔试题&amp;面试题:找出一个数组中第m小的值并输出

    题目:找出一个数组中第m小的值并输出. 代码: #include <stdio.h> int findm_min(int a[], int n, int m) //n代表数组长度,m代表找 ...

  8. C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework

    C#实现如何判断一个数组中是否有重复的元素   如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...

  9. js向一个数组中插入元素的几个方法-性能比较

    向一个数组中插入元素是平时很常见的一件事情.你可以使用push在数组尾部插入元素,可以用unshift在数组头部插入元素,也可以用splice在数组中间插入元素. 但是这些已知的方法,并不意味着没有更 ...

  10. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

随机推荐

  1. pytest用例管理框架实战(基础篇)

    先安装pip install pytest pytest用例管理框架 默认规则: 1.py文件必须以test_开头或者_test结尾 2.类名必须以test开头 3.测试用例必须以test_开头 ge ...

  2. cmd查看对应端口使用情况

    cmd查看端口号netstat -ano | findstr 80

  3. 使用VSCode调试C#时,Console.ReadLine()弹出命令框调试

    原文链接:https://blog.csdn.net/qq_29503199/article/details/88351498   要在调试时读取输入,可以在 launch.json 中使用配置中的 ...

  4. 使用 SpeechT5 进行语音合成、识别和更多功能

    我们很高兴地宣布,SpeechT5 现在可用于 Transformers (一个开源库,提供最前沿的机器学习模型实现的开源库). SpeechT5 最初见于微软亚洲研究院的这篇论文 SpeechT5: ...

  5. Apk_动态调试方案

    环境准备 安装夜神安卓模拟器 配置好adb[Android 调试桥]环境(这里需要使用官方的adb环境,设置好环境变量)Android 调试桥 (adb) | Android 开发者 | Androi ...

  6. MyBatis 分页(前后端插件)实现

    一.后端使用 PageHelper插件 [1]引入 PageHelper jar包(Maven项目) 1 <dependency> 2 <groupId>com.github. ...

  7. react webpack自定义配置

    在react当中,webpack的配置是被隐藏了的,如果想要配置webpack,有两种方法: 一.暴露出webpack的配置文件(不推荐) 执行 npm run eject 二.使用craco添加配置 ...

  8. ACM-刷题记录-14届NEFU校赛

    P2031凯撒密码 #include<bits/stdc++.h> using namespace std; int main(){ string s; int d; while(cin& ...

  9. 经GitHub将kubernetes镜像推送到阿里云

    背景 在安装kubernetes时会出现无法访问镜像站的情况,通过GitHub将kubernetes镜像推送到阿里云之后,即可使用阿里云地址引用所需镜像,现已同步镜像5000+,当前还在陆续同步.仓库 ...

  10. Schillace法则:使用LLM创建软件的最佳实践

    LLM(大语言模型)的发展正在改变软件开发的方式. 以前,开发人员需要编写大量的代码来实现其意图,但现在,随着语言模型的发展,开发人员可以使用自然语言来表达他们的意图,而无需编写大量的代码.这使得软件 ...