算法很美--查找與排序

題目1 : Exam13_Median
時間限制:5000ms
單點(diǎn)時限:1000ms
內(nèi)存限制:256MB

描述

給定一個正整數(shù)數(shù)組,請求出自第一個元素開始到每個元素為終點(diǎn)的中位數(shù)。
輸入

第一行:N(1<N<=1000),代表數(shù)組的長度
第二行:N個整數(shù),作為數(shù)組的元素躯舔,空格分開
輸出

N個整數(shù),空格隔開;第一位是數(shù)組第一個元素髓迎,第二位是前兩個元素的上中位數(shù)……
樣例輸入

5
4 6 9 4 5

樣例輸出

4 4 6 4 5

AC代碼

#include<stdio.h>
/// 化問題為求單個數(shù)組的中位數(shù)
void px(int*a,int i)    //  地址傳遞,可節(jié)約運(yùn)行時間
{
    int j,jj;
    for(j=i;j>0;j--)
        for(jj=0;jj<j;jj++)
        {
            if(a[jj]>a[jj+1])   //  交換兩個數(shù)
            {
                a[jj]+=a[jj+1];
                a[jj+1]=a[jj]-a[jj+1];
                a[jj]=a[jj]-a[jj+1];
            }
        }
    printf("%d ",a[i/2]);
}
main()
{
    int n,i;
    scanf("%d",&n);
    int a[n]; 
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    {
        px(a,i);
    }
    return 0;
} 

時間限制:5000ms
單點(diǎn)時限:1000ms
內(nèi)存限制:256MB

描述

數(shù)組小和的定義如下:

例如:數(shù)組s = [1, 3, 5, 2, 4, 6]挡爵,在s[1]的左邊小于或等于s[1]的數(shù)的和為1竖般,在s[2]的左邊小于或等于s[2]的數(shù)有1和3,求和為4茶鹃,……涣雕,將所有位置的左邊比它小或者等于的數(shù)的和相加起來就是真?zhèn)€數(shù)組的小和。

給定一個數(shù)組闭翩,輸出數(shù)組的小和挣郭。
輸入

第一行:N(1<N<=100000),代表數(shù)組的長度
第二行:N個整數(shù)(<=100)疗韵,作為數(shù)組的元素兑障,空格分開
輸出

數(shù)組的小和
樣例輸入

5
58 74 14 39 15

樣例輸出

86

AC代碼 ---Java

//計(jì)算數(shù)組的小和
import java.util.*;

public class Main{
    
    //方法二(歸并排序),時間復(fù)雜度為O(NlogN),額外的空間復(fù)雜度為O(N)
    public static int GetMinArrSum2(int[]arr)
    {
        if(arr==null||arr.length==0)
        {
            return 0;
        }
        return func(arr,0,arr.length-1);

    }
  //運(yùn)用遞歸函數(shù)實(shí)現(xiàn)
    public static int func(int[]arr,int l,int r)
    {
        //遞歸的出口
        if(l==r)
        {
            return 0;
        }
        int mid=(l+r)/2; //中間位置的數(shù)
        return func(arr,l,mid)+func(arr,mid+1,r)+merge(arr,l,mid,r);
    }   
  //歸并排序的具體實(shí)現(xiàn)
    public static int merge(int[]arr,int l,int mid,int r)
    {
        int[]h=new int[r-l+1]; //開辟O(N)的空間
        int hi=0;
        int i=l;
        int j=mid+1;
        int smallSum=0;
        while(i<=mid&&j<=r)
        {
            if(arr[i]<=arr[j])
            {
                smallSum+=arr[i]*(r-j+1);
                h[hi++]=arr[i++];
            }else
            {
                h[hi++]=arr[j++];
            }
        }
        for(;(j<r+1)||(i<mid+1);j++,i++)
        {
            h[hi++]=i>mid?arr[j]:arr[i];
        }

        //對原數(shù)組的重新賦值
        for(int k=0;k!=h.length;k++)
        {
            arr[l++]=h[k];
        }    
        return smallSum;
    }

  //打印數(shù)組的內(nèi)容
    public static void PrintArr(int[]arr)
    {
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void main(String[]args)
    {
        //System.out.println("Hello");
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int[] arr = new int[a];
        for(int i = 0;i<a;i++){
            arr[i]=in.nextInt();
        }
        System.out.println(GetMinArrSum2(arr));
    }
}

題目3 : Exam15_MaxHeap
時間限制:5000ms
單點(diǎn)時限:1000ms
內(nèi)存限制:256MB

描述

給定一個數(shù)組蕉汪,求最小的K個數(shù)流译。由于數(shù)組規(guī)模很大,請精心設(shè)計(jì)算法者疤。
輸入

第一行:N(1<N<=100000)福澡,代表數(shù)組的長度
第二行:K(<=1000,<N),代表求從小到大的K個數(shù)
第三行:N個整數(shù)驹马,作為數(shù)組的元素革砸,空格分開
輸出

從小到大輸出K個數(shù)組中最小的數(shù),空格隔開
樣例輸入

10
3
1 3 4 2 6 7 8 10 11 12

樣例輸出

1 2 3

AC代碼

#include<stdio.h>
//  k 個循環(huán)糯累,求出最小的k個數(shù)即可結(jié)束
void px(int*a,int n,int k)
{
    int jj,j;
    for(jj=0;jj<k;jj++)
    {
        for(j=n-2;j>=jj;j--)
        {
            if(a[j]>a[j+1])
            {
                a[j]+=a[j+1];
                a[j+1]=a[j]-a[j+1];
                a[j]=a[j]-a[j+1];
            }
        }
        printf("%d ",a[jj]);
    }
        
}
main()
{
    int n,a[100000],i,s=0,k;
    scanf("%d",&n);
    scanf("%d",&k);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    px(a,n,k);
    return 0;
} 

題目4 : Exam16_CombineString
時間限制:5000ms
單點(diǎn)時限:1000ms
內(nèi)存限制:256MB

描述

給定一個字符串類型的數(shù)組strs算利,請找到一種拼接順序,使得將所有的字符串拼接起來組成的大字符串是所有可能性中字典順序最大的泳姐,并輸出這個大字符串效拭。
輸入

第一行:N(1<N<=100),代表數(shù)組的長度
第二行:N個字符串,作為數(shù)組的元素允耿,空格分開借笙,字符串長度<=10
輸出

字典序最大的大字符串
樣例輸入

5
a ac ab def d

樣例輸出

defdacaba

AC代碼

#include<stdio.h>
#include<string.h>
main()
{
    char str[101][11];
    char tp1[21],tp2[21],tmp[11];
    int n,i,f,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%s",&str[i]);
        
    for(j=n-1;j>0;j--)
    for(i=0;i<j;i++)
    {
        strcpy(tp1,str[i]);
        strcat(tp1,str[i+1]);   //  tp1= str[i]+str[i+1]
        strcpy(tp2,str[i+1]);
        strcat(tp2,str[i]);     //  tp2= str[i+1]+str[i]
        
        f=strcmp(tp1,tp2);  //  比較結(jié)果給f
        if(f<0)
        {   //  交換
            strcpy(tmp,str[i]);
            strcpy(str[i],str[i+1]);
            strcpy(str[i+1],tmp);
        }
    }
    
    for(i=0;i<n;i++)
        printf("%s",str[i]);
    return 0;
} 

題目5 : Exam17_NewOrder
時間限制:5000ms
單點(diǎn)時限:1000ms
內(nèi)存限制:256MB

描述

一般我們在對字符串排序時,都會按照字典序排序较锡。當(dāng)字符串只包含小寫字母時业稼,相當(dāng)于按字母表"abcdefghijklmnopqrstuvwxyz"的順序排序。

現(xiàn)在我們打亂字母表的順序蚂蕴,得到一個26個字母的新順序:bdceafghijklmnopqrstuvwxyz低散,代表'b'排在'd'前,'d'在'c'前骡楼,'c'在'e'前……

給定N個字符串熔号,請你按照新的字母順序?qū)λ鼈兣判颉?br> 輸入

第一行包含一個整數(shù)N。(1 <= N <= 1000)

第二行包含26個字母鸟整,代表新的順序引镊。

以下N行每行一個字符串S。 (|S| <= 100)
輸出

按新的順序輸出N個字符串篮条,每個字符串一行弟头。
樣例輸入

5
bdceafghijklmnopqrstuvwxyz
abcde
adc
cda
cad
ddc

樣例輸出

ddc
cda
cad
abcde
adc

半AC只跑了80分 還得改進(jìn)。

#include<stdio.h>
#include<string.h> 

char qj[1001][101];///  將輸入數(shù)組化為abc..并保存
int sum=0;

void change(char *aa,char *bb,int len,char *tp)// 對應(yīng)abc涉茧。赴恨。保存
{ 
    int i,j,jj;
    for(j=0;j<len;j++)
    for(i=0;i<26;i++)
    {
        if(tp[j]==aa[i])
        {
            tp[j]=bb[i];
            break;
        }
    }
    strcpy(qj[sum++],tp);
}
main()
{
    
    char tp[101];
    char str[1001][101];    //  保存輸入的數(shù)組
    char aa[26],bb[26];
    int n,i,len,f;
    
    scanf("%d",&n);
    
    scanf("%s",&aa);    //  a 新順序
    
    for(i=0;i<n;i++)
        scanf("%s",&str[i]);    //  多行字符串 
        
    for(i=0;i<26;i++)
        bb[i]='a'+i;    //  b 原順序 
        
    for(i=0;i<n;i++)
    {
        strcpy(tp,str[i]);
        change(aa,bb,strlen(str[i]),tp);
    }
    for(sum=n-1;sum>0;sum--)    
    for(i=0;i<sum;i++)
    {
        //  比較 排序 
        f=strcmp(qj[i],qj[i+1]);
        if(f>0)
        {
            strcpy(tp,qj[i]);
            strcpy(qj[i],qj[i+1]);
            strcpy(qj[i+1],tp);
            // 同時對str[]排序
            strcpy(tp,str[i]);
            strcpy(str[i],str[i+1]);
            strcpy(str[i+1],tp);
        }
    }
    for(i=0;i<n;i++)
        printf("%s\n",str[i]);  //  輸出  
    return 0;
} 

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市伴栓,隨后出現(xiàn)的幾起案子伦连,更是在濱河造成了極大的恐慌,老刑警劉巖钳垮,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惑淳,死亡現(xiàn)場離奇詭異,居然都是意外死亡饺窿,警方通過查閱死者的電腦和手機(jī)歧焦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來短荐,“玉大人倚舀,你說我怎么就攤上這事叹哭∪趟危” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵风罩,是天一觀的道長糠排。 經(jīng)常有香客問我,道長超升,這世上最難降的妖魔是什么入宦? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任哺徊,我火速辦了婚禮,結(jié)果婚禮上乾闰,老公的妹妹穿的比我還像新娘落追。我一直安慰自己,他們只是感情好涯肩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布轿钠。 她就那樣靜靜地躺著,像睡著了一般病苗。 火紅的嫁衣襯著肌膚如雪疗垛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天硫朦,我揣著相機(jī)與錄音贷腕,去河邊找鬼。 笑死咬展,一個胖子當(dāng)著我的面吹牛泽裳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挚赊,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼诡壁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荠割?” 一聲冷哼從身側(cè)響起妹卿,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔑鹦,沒想到半個月后夺克,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嚎朽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年铺纽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哟忍。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡狡门,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锅很,到底是詐尸還是另有隱情其馏,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布爆安,位于F島的核電站叛复,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褐奥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一咖耘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撬码,春花似錦儿倒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹈垢,卻和暖如春慷吊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曹抬。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工溉瓶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谤民。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓堰酿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親张足。 傳聞我的和親對象是個殘疾皇子触创,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,333評論 0 2
  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,125評論 0 3
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,723評論 0 10
  • 世界杯的激情为牍, 對世界杯感受最深的就是2002年的時候哼绑,中國隊(duì)終于沖出底線,進(jìn)入世界杯的角逐之列碉咆。當(dāng)年正在上初中抖韩,...
    時間里的花Lily閱讀 183評論 0 0