zoukankan      html  css  js  c++  java
  • 51nod 1294 :修改数组 && HDU 5256:序列变换

    题目来源: HackerRank
    基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题
     收藏
     取消关注
    给出一个整数数组A,你可以将任何一个数修改为任意一个正整数,最终使得整个数组是严格递增的且均为正整数。问最少需要修改几个数?
    Input
    第1行:一个数N表示序列的长度(1 <= N <= 100000)。
    第2 - N + 1行:每行1个数,对应数组元素。(0 <= A[i] <= 10^9)
    Output
    输出最少需要修改几个数使得整个数组是严格递增的。
    Input示例
    5
    1
    2
    2
    3
    4
    Output示例
    3


    发现规律就是如果该位置的数a[i]-i,这个数如果小于零了,那么这个数是一定要修改的。
    剩下的那些a[i]-i就是要找最长的非严格递增序列了。
    代码:
    #include <iostream>  
    #include <algorithm>  
    #include <cmath>  
    #include <vector>  
    #include <string>  
    #include <cstring>  
    #pragma warning(disable:4996)  
    using namespace std;
    
    int n;
    int val[100005];
    int f[100005];
    int soar[100005];
    
    int main()
    {
    	//freopen("i.txt", "r", stdin);
    	//freopen("o.txt", "w", stdout);
    
    	int i, k, num, ans;
    	scanf("%d", &n);
    
    	num = 0;
    	ans = 0;
    	for (i = 0; i < n; i++)
    	{
    		scanf("%d", &val[i]);
    		val[i] = val[i] - (i + 1);
    
    		if (val[i] < 0)
    		{
    			ans++;
    		}
    		else
    		{
    			f[num++] = val[i];
    		}
    	}
    	
    	fill(soar,soar+num,-1);
    	k = 0;
    	
    	for (i = 0; i < num; i++)
    	{
    		if (f[i] >= soar[k])
    		{
    			soar[++k] = f[i];
    		}
    		else
    		{
    			int pos = upper_bound(soar, soar + k + 1, f[i]) - soar;
    			soar[pos] = f[i];
    		}
    	}
    	printf("%d
    ", num - k + ans);
    	//system("pause");
    	return 0;
    }

    序列变换

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 952    Accepted Submission(s): 375


    Problem Description
    我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。
    请输出最少需要修改多少个元素。
     

    Input
    第一行输入一个T(1T10),表示有多少组数据

    每一组数据:

    第一行输入一个N(1N105),表示数列的长度

    第二行输入N个数A1,A2,...,An

    每一个数列中的元素都是正整数而且不超过106
     

    Output
    对于每组数据,先输出一行

    Case #i:

    然后输出最少需要修改多少个元素。
     

    Sample Input
    2 2 1 10 3 2 5 4
     

    Sample Output
    Case #1: 0 Case #2: 1
     

    和之前的没什么区别,把大于0的条件删掉就OK。
    代码:
    #include <iostream>  
    #include <algorithm>  
    #include <cmath>  
    #include <vector>  
    #include <string>  
    #include <cstring>  
    #pragma warning(disable:4996)  
    using namespace std;
    
    int n;
    int val[100005];
    int f[100005];
    int soar[100005];
    
    int main()
    {
    	//freopen("i.txt", "r", stdin);
    	//freopen("o.txt", "w", stdout);
    
    	int i, k, num;
    	
    	int test, cas = 1;
    	scanf("%d", &test);
    	while (test--)
    	{
    		scanf("%d", &n);
    
    		num = 0;
    		for (i = 0; i < n; i++)
    		{
    			scanf("%d", &val[i]);
    			val[i] = val[i] - (i + 1);
    			f[num++] = val[i];		
    		}
    
    		fill(soar, soar + num, -1000005);
    		k = 0;
    
    		for (i = 0; i < num; i++)
    		{
    			if (f[i] >= soar[k])
    			{
    				soar[++k] = f[i];
    			}
    			else
    			{
    				int pos = upper_bound(soar, soar + k + 1, f[i]) - soar;
    				soar[pos] = f[i];
    			}
    		}
    		printf("Case #%d:
    ", cas++);
    		printf("%d
    ", num - k);
    	}
    	//system("pause");
    	return 0;
    }



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    IOS微信浏览器返回事件popstate监听
    图解用HTML5的popstate如何玩转浏览器历史记录
    如何在深层嵌套ngRepeat中获取不同层级的$index
    angular ng-repeat 如何实现嵌套
    AJAX的工作原理
    利用angular指令监听ng-repeat渲染完成后执行脚本
    AngularJS中$http服务的简单用法
    AngularJS的Filter用法详解
    angularJS发起$http.post请求后台收不到数据解决方案
    AngularJs的UI组件ui-Bootstrap分享(十四)——Carousel
  • 原文地址:https://www.cnblogs.com/lightspeedsmallson/p/4899521.html
Copyright © 2011-2022 走看看