2017/09/06:算法练习小记

今天做了7622求排列逆序,半个小时,得到了一个时间超时的结果,但是我不太知道怎么改进了。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
int num[100002];
int status[100002];
long long result = 0;
int n;
int cal2(int number){
    int x=0;
    for(int i=number;i<n;i++){
        if(status[i]==1)
            x++;
    }
    return x;
}

void cal(int number){
    int i=0;
    for(;i<n;i++){
        if(status[i]==0){
            if(number == num[i]){
                status[i]=1;
            }

            if(number > num[i]){
                break;
            }
        }
    }
    result+=(n-i-cal2(i));
}

bool cmp(int a,int b){
    return a>b;
}

int main()
{
    int x[100002];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>num[i];
        x[i]=num[i];
        status[i]=0;
    }
    sort(num,num+n,cmp);

    for(int i=0;i<n;i++){
        cal(x[i]);
    }
    cout<<result<<endl;
    return 0;
}

思路是把数组排序好,然后每个对应了标记,用过的就把标记设为1,这样再计算。

后来发现,确实要循环很多次,有点耗时间。

然后看看提干,发现有提示说用归并排序,然后我就去查归并排序了。

后来发现是利用递归,然后把左边排好,右边排号,再合并起来。

但是我还是不太熟悉,大概是弄懂原理了,还是错了0-0。

觉得自己周末得花半天来专门练习算法,然后解决这些遗留问题,

然后每天的算法题如果没做出来,就至少也得写一篇这样的小结文章,反思,嗯啊加油。

时间: 2024-10-11 12:34:09

2017/09/06:算法练习小记的相关文章

2014年至今的博文目录(更新至2017年06月12日)

拓扑学中凝聚点的几个等价定义(2017-06-12 07:51) 江苏省2017年高等数学竞赛本二试题(含解答)(2017-06-10 20:59) 裴礼文数学分析中的典型问题与方法第4章一元函数积分学练习(2017-06-10 11:04) 2017年厦门大学第十四届景润杯数学竞赛试卷(数学类)评分标准(2017-06-05 15:31) 2017年华东师范大学数学竞赛(数学类)试题(2017-06-05 15:28) 裴礼文数学分析中的典型问题与方法第3章一元微分学练习(2017-05-30

2017年06月30号课堂笔记

2017年06月30号 星期五 多云 空气质量:中度污染 内容:MySQL第三节课 一.delete 和 truncate的区别 01.delete begin (开启事务)select * from grade;(查询年级表中所有的数据) delete from grade; (删除年级表中所有的数据)select * from grade;(查询年级表中所有的数据,没有数据) rollback; (事务回滚)select * from grade;(查询年级表中所有的数据,删除的数据恢复)

Java转换Json日期/Date(1487053489965+0800)/格式以及js时间格式 Tue Feb 14 2017 14:06:32 GMT+0800

/Date(1487053489965+0800)/用Java怎么转换成yyyy-MM-dd的格式 Tue Feb 14 2017 14:06:32 GMT+0800用Java怎么转换成yyyy-MM-dd的格式 跟普通的日期不太一样 public static void main(String[] args) { String str="/Date(1487053489965+0800)/"; str=str.replace("/Date(","&quo

调试大叔V1.0.1(2017.09.01)|http/s接口调试、数据分析程序员辅助开发神器

2017.09.01 - 调试大叔 V1.0.1*支持http/https协议的get/post调试与反馈:*可保存请求协议的记录:*内置一批动态参数,可应用于URL.页头.参数:*可自由管理cookie:*支持请求的代理与模拟环境参数设置:*时间戳管理(取网络当前时间戳.转成日期.转成倒计时):*支持拖放文件到本程序窗计算文件的MD5.SHA1.CRC32值:*集成常见编码解码(Ansi与Utf8互转.URL加解密.UniCode转中文);*集成常用符号与其UniCode值:*集成常用数学计算

2017年06月07号课堂笔记

2017年06月07号 晴 空气质量:中度污染->良 内容:jQuery第二节:基本选择器,层次选择器,属性选择器, 基本过滤选择器,可见性过滤选择器 备注:代课老师:李老师 一.基本选择器 1)老师代码: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(

【2017.09.29 星期五 关于c++瞎侃】

c++中最重要的语法特征就是 类 了,通过它,程序员可以自定义自己的数据类型. c++中的类包含 数据成员 也 包含 函数成员. C++语言主要的一个设计目标 就是让程序员自定义的的数据类型向 内置类型一样 好用. 基于此, 标准c++库 实现了丰富的类和函数. 野心很大 [2017.09.29 星期五 关于c++瞎侃]

无垠PE组合工具2017.09.03 维护版网络版

适合大众--无垠PE组合工具,维修维护专用--简洁实用.功能俱全,赢得信赖! 无垠PE及工具都源于无忧启动论坛所得,无OEM或个人信息,不修改主页.不写垃圾文件.无广告.无暗扣.无陷阱!采用Win8PEx64内核.工具网络全内置,支持UEFI启动.可量产.刻盘.U+/B+.无垠PE组合工具修改版由网友"恋梦"更新维护,在原版基础适当精简后,针对里面工具进行升级,精简不常用工具,维护系统完全够用!123 新版变化 2017.09.03 更新- Acronis True Image 201

BSGS算法学习小记(大步小步算法)

简介 先看一个式子xy≡z(modp),z是质数 现在只知道x和z,要求y. 大步小步算法(BSGS,Baby Steps Giant Steps)就是解决这个问题. 算法流程 暴搜的枚举范围 根据费马小定理:xz?1≡1. 如果y已经枚举到了z-1了,继续枚举的话就会产生循环. 所以,在暴搜中y的枚举范围就是0--z-1. 如何优化暴搜 我们想一想可不可以用分块来解决枚举的y. 把y分成p?1????√分别枚举行不行? 设m=p?1????√,y=a?m+b,这样枚举a和b就相当于分块枚举了.

带修改的莫队算法学习小记

简介 莫涛大神创造出的离线询问算法的带修改版. 算法基础:需要掌握莫队算法,会打暴搜(暴力). 一个叫莫的双端队列. 只支持单点修改 操作方法 普通的不带修改的莫队算法要把每个询问带上两个关键字排序,现在待修改的莫队算法要带上三个关键字排序. 初始操作 fo(i,1,m) { scanf("%s%d%d",s,&k,&l); if (s[0]=='Q')a[++tot].l=k,a[tot].r=l,a[tot].x=num,a[tot].p=tot; else d[+