删数问题

删数问题(贪心算法) 问题描述:给定n位正整数a,去掉其中任意k<=n个数后,剩下的数按原次序重新排列成一个新的正整数。对于给定的n位正整数a和正整数k,设计一个算法使这个新的正整数达到最小。 问题说明:给定一个正整数a为 785314,经过删数后得到的最小的正整数应该是 14。 问题解析:这道题乍一看好象挺简单,我排个序,删4个最大值不就解决了吗?但仔细一看,好像又不太对,上面例子删4个最大值后的值是31,... 阅读详情

http://nnsznoi.openjudge.cn/sysffx/02/

总时间限制: 
1000ms 
内存限制: 
1024kB
描述

输入一个高精度正整数N,去掉其中任S个数字后剩下的数字按原左右次序组成一个新的正整数,编程对给定的N和S,寻找一种方法使剩下的数字组成的新数最小

输入
两个一个高精度数(长度小于255) s
输出
最小的新数
样例输入
174 1
样例输出
14


package Greedy;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

/**
 * 考虑只删一个数的情况,最优解是删除出现的第一个左边>右边的数,因为删除之后高位减小,很容易想...那全局最优解也就是这个了,
 * 因为删除S个数字就相当于执行了S次删除一个数,因为留下的数总是当前最优解
 * 
 */
public class DeleteNumber {

	public static void main(String[] args) throws FileNotFoundException {
		Scanner sc = new Scanner(System.in);

		// File file = new File("src/Greedy/DeleteNumber.in");
		// Scanner sc = new Scanner(file);

		while (sc.hasNextLine()) {
			int N = sc.nextInt();
			int S = sc.nextInt();
			System.out.println(greedy(N, S));
		}
	}

	public static String greedy(int N, int S) {
		StringBuffer sb = new StringBuffer(N + "");
		boolean del = false; // 表示

		for (int i = S; i > 0; i--) {
			del = false;
			// 每次删除第一个比下一个数字大的数
			for (int j = 0; j < sb.length() - 1; j++) {
				if (sb.charAt(j) > sb.charAt(j + 1)) {
					sb.delete(j, j + 1);
					del = true;
					break;
				}
			}

			// 如果所有数字递增,则删除最后几个数字直接返回
			// 如123 -> 12
			if (del == false) {
				sb.delete(sb.length() - i, sb.length());
			}
		}

		return sb.toString();
	}

}




《删数问题》 键盘输入一个高精度的正整数 nn(不超过 250250 位),去掉其中任意 kk 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 nn 和 kk,寻找一种方案使得剩下的数字组成的新数最小。// 找到第一个满足 n[j] > n[j + 1] 的位置,删除 n[j]// 如果没有找到满足 n[j] > n[j + 1] 的位置,从末尾删除数字。,保证 1≤k<len⁡(n)≤2501≤k<len(n)≤250。// 输入要删除的数字个数 k。// 输入高精度正整数 n。 阅读详情

相关推荐

Java入门第84课——StringBuilder的delete方法

问题 测试StringBuilder的delete方法,即,现有字符序列"javaoraclecppc#php",删除该字符序列中的"oracle"。 方案 使用StringBuilder的delete方法,可以实现将字符序列"javaoraclecppc#php"中的"oracle"删除,代码如下所示: sb.delete(4,4+6); ...

Java学习博客 1万+

第五章 Java API(二)

StringBuffer类和StringBuilder类的对象都可以被多次修改,并不产生新的未使用对象。StringBuffer不能被同步访问,而StringBuilder可以被同步访问。

Yuns_的博客 432

详细对比模型训练和模型精调

当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。

pumpkin84514的博客 1852

JAVA基础问题(一)

1.JDK和JRE有什么区别 JDK: Java Development Kit 的简称,java开发工具包,提供了java的开发环境和运行环境 JRE:Java Runtime Environment ,java运行环境,为java的运行提供了所需环境 具体来说JDK包含JRE,同时还包含了编译Java源码的编译器javac,还包含很多java程序调试和分析的工具。 简单来说,如果你只运行j...

Y,yyy的博客 303

OpenBmc开发2:构建开发环境

编译环境VMware + ubuntu 18.04 编译环境构建:参考OpenBmc开发1:构建开发环境 1、打开一个Ternimal,进入openbmc目录下 2、查看有哪些不同的编译配置 find meta-* -name local.conf.sample 可以看到如下编译配置 3、生成编译配置 插入TEMPLATECONF,上边查询到的配置有很多,但是有一些...

master 2万+

MLNX_OFED 5.4-3.7.5.0 驱动安装:银河麒麟V10SP2 ARM 内核升级后编译避坑 3 步

本文详细介绍了在银河麒麟V10SP2 ARM环境下安装MLNX_OFED 5.4-3.7.5.0驱动的完整流程,包括内核升级后的驱动兼容性挑战、编译环境准备、分步编译与安装流程以及性能优化与故障排查。特别针对国产化ARM服务器(如华为Atlas系列)提供了实用的解决方案和常见问题处理建议,帮助用户顺利完成mlnx网卡驱动的安装与配置。

weixin_29184075的博客 403

Java软件开发技术面试题总结二

Java软件开发技术面试题总结二 常见的基础内容: Java 的命名规范: Java是大小写敏感的,这就意味着标识符Hello与hello是不同的 java的变量命名规范:首字母:英文字母、和下划线。变量名:由和下划线。变量名:由和下划线。变量名:由、字母、数字和下划线组成。 类名:单个单词,首字母大写,多个单词,首字母都大写。 方法名、参数名、变量名:单个单词,首字母小写,多个单词,第一单词首字母小写,其他单词首字母大写。 包名:全部小写。 java的修饰符: 非访问控制修饰符 : final, abst

weixin_47312141的博客 318

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 422

* StringBuffer的删除功能

package cn.itcast_03; /*  * StringBuffer的删除功能  * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身  * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身  */ pub

why 831

用PyCharm+Scrapy打造你的第一个爬虫:从安装到实战(附完整代码)

本文详细介绍了如何使用PyCharm和Scrapy框架从零开始构建高效网络爬虫。通过环境配置、项目创建、核心爬虫逻辑编写到数据处理与存储的完整流程,帮助Python开发者快速掌握爬虫开发技巧,并附有实战代码示例。特别适合想要学习Scrapy框架和提升爬虫技能的开发者。

weixin_29038345的博客 867

Python爬虫实战:逆向解析央视频加密参数(附完整代码)

本文详细解析了央视频加密体系的技术实现,通过Python逆向工程实战演示如何解密动态密钥、AES加密和自定义哈希算法等核心组件。文章提供完整代码示例,涵盖GUID生成、参数构造和异步请求处理,帮助开发者掌握现代视频平台的反爬机制破解方法。

weixin_42532473的博客 1129

删数问题 java版

敲下这

weixin_44831536的博客 1659

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 497

(Java实现) 删数问题

删数问题(需知道的数学定理) 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。 定理: ex:1 2 3 9 5;删掉一个数; 从第一个数开始遍历,到寻找到单调递减的第一个数(即单调递增的最后一个数),则删除,若无单调递减子序列,则删掉最后一个非递减序列的数;每找到一...

南 墙 1万+

Unity之如何实现TTS文本转语音(真人发音)

微软Azure TTS 文本转语音 服务 将文本转换为逼真的语音的语音服务功能 支持个各国语言,各种中文各种方言,支持不同音色男音女音 支持离线和在线版本

TxNet 5479

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

P1106删数问题

链接我也放到文章的前头咯~简单来说,遇到高峰,即遇到一个数字,它比左右两边的数都大,或者比右边的数大(特指的是第一个数字),那就删去即可。(这里的erase函数确实是一个很棒的函数)其实这里是一个更妙的方法,来找到了一个最小值。个数字,在前k个数字里找到一个最小的数字,那么这个数字前的数字都可以删去了(这个删去的原因应该很明显吧,欲求的答案是最小的数,那答案的第一个数肯定是越小越好)。一般思路:要想得到的数最小,一个很自然的想法,就是把大数字,且位置靠前的数字删去。返回值是一个布尔值,表示是否删除成功。

jjy2023bjtu的博客 1555

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

贪心算法——删数问题

已经很久没有和大家见面了!今天给大家带来的是贪心算法中的一类问题——删数问题。 那么首先我们要了解:贪心算法是什么??? 所谓贪心算法,当然是很贪心的算法。就是鼠目寸光地从局部看全局,首先得到局部的最优解,从而推导出全局的最优解。但是这种算法有时候并不适用,乱用会导致进入误区。 例如这一道题: 在一个长n宽m的矩形中,有n*m数,若要从左下角走到右上角,且只能向右或向上走,问经过的数字之和最

Locke的博客 3万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OJ 删数问题

删数问题 Time Limit: 1000MS Memory limit: 65536K 题目描述  键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。 输入   输入有多组 每组包括原始数n,要去掉的数字数s;

xxxchic 1294

删数java_删数问题 java版

在这里敲下第一个字的时候,意味着我是全心全意入了这个纠结很久的坑,这是第一篇博客,怀着紧张且忐忑的心情,这篇博客是个开始,在此时此刻,我祝自己未来一路顺风。介绍一下删数问题的java版##问题描述:给定n 位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。##运行实例:输入:17...

weixin_29826879的博客 634

A - 删数问题

A - 删数问题 Description 键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。 Input 输入有多组 每组包括原始数n,要去掉的数字数s; Output 输出去掉s个数后最小的数 Sample Input 178543 4 Output 13 Hint ...

qq_32639797的博客 544
上一篇: Add Two Numbers 把两个以链表形式表示的数相加 @LeetCode
下一篇: NOIP实用算法 4.贪心方法
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值