2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下 :
1 i == 1时,V[i] = 1;
2 i > 1时,如果S[i] != S[i-1],V[i] = 1;
3 i > 1时,如果S[i] == S[i-1],V[i] = V[i-1] + 1。
你可以随意删除S中的字符,返回整个S的最大价值,
字符串长度<=5000。
来自腾讯。

答案2021-12-25:

递归。从左往右的尝试模型。
当前index位置的字符保留;当前index位置的字符不保留。这两种情况取最大值。

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

package main

import "fmt"

func main() {
ret := max1("000001100000")
fmt.Println(ret)
} func max1(s string) int {
if len(s) == 0 {
return 0
}
str := []byte(s)
arr := make([]int, len(str))
for i := 0; i < len(arr); i++ {
if str[i] == '0' { } else {
arr[i] = 1
}
}
return process1(arr, 0, 0, 0)
} // 递归含义 :
// 目前在arr[index...]上做选择, str[index...]的左边,最近的数字是lastNum
// 并且lastNum所带的价值,已经拉高到baseValue
// 返回在str[index...]上做选择,最终获得的最大价值
// index -> 0 ~ 4999
// lastNum -> 0 or 1
// baseValue -> 1 ~ 5000
// 5000 * 2 * 5000 -> 5 * 10^7(过!)
func process1(arr []int, index, lastNum, baseValue int) int {
if index == len(arr) {
return 0
}
curValue := 0
if lastNum == arr[index] {
curValue = baseValue + 1
} else {
curValue = 1
} // 当前index位置的字符保留
next1 := process1(arr, index+1, arr[index], curValue)
// 当前index位置的字符不保留
next2 := process1(arr, index+1, lastNum, baseValue)
return getMax(curValue+next1, next2)
} func getMax(a, b int) int {
if a > b {
return a
} else {
return b
}
}

执行结果如下:


左神java代码

2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下的更多相关文章

  1. 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

    """ #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...

  2. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  3. 刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等

    题目: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,下标 ,a ,b , c 对应数相加等于 targe 找出所有满足条件且不重复的三元组下标 解析: ...

  4. 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。

    // test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  5. 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

    分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...

  6. 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。

    题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0. 解法一:暴力求解.从1开始查找M,然后判断M*N=X这个数字是否只含有0,1. 解法二:由 ...

  7. 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

    题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...

  8. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

  9. 2018.3.12 Leecode习题 给定一个整数数列,找出其中和为特定值的那两个数。

    给定一个整数数列,找出其中和为特定值的那两个数. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用. 示例: 给定 nums = [2, 7, 11, 15], target = 9; 因为 ...

  10. 2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串)

    2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串) https://www.luogu.com.cn/problem/P2824 题意: 在 20 ...

随机推荐

  1. lua脚本概述

    1.lua脚本非常简单,轻量级,易于c/c++调用 2. 协程 是什么,与线程有啥区别 ??

  2. 文件上传靶场 upload-labs搭建 Pass 1-4

    upload-labs是一个练习文件上传的靶场 我们需要先安装中间件和PHP,推荐使用小皮面板,如何安装使用见sqli-labs搭建前部分 upload-labs下载:https://gitcode. ...

  3. Android笔记--外部存储空间

    存储文件的操作 外部存储空间 私有存储空间和公共存储空间 外部存储空间分为私有+公有 保存文件到外部存储空间的相关代码操作: 私有空间: 公有空间: 记得增加权限(Android_Manifest.x ...

  4. NGINX配置SSL支持

    前言 在文章-腾讯云申请免费SSL证书中, 我们已经申请好了SSL证书. 那么现在, 我们就要配置全站SSL了! 这次的工作主要是NGINX的配置, 同时会有一些我的博客本身的配置. 博客本身配置更改 ...

  5. koa中间件的实现原理

    koa中间件的实现原理如何?先来看一个例子. koa的执行顺序是这样的: const middleware = async function (ctx, next) { console.log(1) ...

  6. 关于ul点击事件委托给li时的鼠标拖动问题

    网上查看后发现Click可以被两个事件触发:mouseUp与mouseDown,即点击和松开时都会触发一次. 随后当我从一个li点击拖动到其他li松开时,触发的事件对象因为冒泡变成了父元素ul,并非我 ...

  7. Python之进程管理

    使用python创建进程 from multiprocessing import Process # 导入进程模块 import time # 定义一个函数,测试创建进程使用 def task(nam ...

  8. 带你揭开神秘的Javascript AST面纱之Babel AST 四件套的使用方法

    作者:京东零售 周明亮 写在前面 这里我们初步提到了一些基础概念和应用: 分析器 抽象语法树 AST AST 在 JS 中的用途 AST 的应用实践 有了初步的认识,还有常规的代码改造应用实践,现在我 ...

  9. 08列表(list)与元组(tuple)

    列表(list)与元组(tuple) 列表的格式 >- [数据1,数据2,数据3,数据4,......] >- 列表可以存储多个数据,数据之间的逗号以英文分割而且可以数据是不同类型的数据, ...

  10. nginx 极简教程

    什么是 Nginx? Nginx (engine x) 是一款轻量级的 Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse Pro ...