1. 程式人生 > >Stay Hungry , Stay Foolish

Stay Hungry , Stay Foolish

小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?

輸入描述:

輸入包含多組測試資料。 對於每組測試資料: N - 本組測試資料有n個數 a1,a2...an - 需要計算的資料 保證: 1<=N<=100000,0<=ai<=INT_MAX.



輸出描述:

對於每組資料,輸出兩個數,第一個數表示差最小的對數,第二個數表示差最大的對數。


輸入例子:
6
45 12 45 32 5 6

輸出例子:
1 2
//我的程式碼,首先考慮n=1,然後考慮全相等。算差最大的個數很簡單,不解釋。算最小時,要注意出現連續數相等時,指標的變化。本文演算法先計算連續出現相等數的個數liandeng+2,然後利用公式: (liandeng+2-1)*(liandeng+2)/2,算出此時最小值為0的個數,將其加入最小值總個數中。此演算法時間複雜度略大於n,但遠小於n^2.
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{

	int n=0, i,count,x,y,min,countmin,temp,liandeng,lianxu;
	while(cin>>n)
	{
		liandeng=0;
		int *p=new int[n];
		for(i=0;i<n;i++)
			cin>>*(p+i);
		sort(p,p+n);
		if(n==1)
		{
			cout<<0<<" "<<0<<endl;
			continue;
		}
		if(*p==*(p+n-1))
		{
			cout<<(n-1)*n/2<<" "<<(n-1)*n/2<<endl;	
			continue;
		}
		min=*(p+n-1)-*(p+n-2);
		countmin=1;
		for(i=n-2;i>0;i--)
		{
			
			temp=*(p+i)-*(p+i-1);
			if(temp<min)
			{		
				min=temp;
				countmin=1;
				liandeng=0;
			}
			else if(temp==min)
			{
				while(i>0&&*(p+i-1)==*(p+i+1))
				{
				liandeng=liandeng+1;
				i=i-1;
				}
				if(liandeng!=0)
				{
				lianxu=(liandeng+2-1)*(liandeng+2)/2-1;	//countmin在演算法發現連等出現之前已經加了1了,此處要減去。。
				countmin+=lianxu;
				i=i+1;
				}
				if(liandeng==0)
					countmin++;
				liandeng=0;
			}

		}
		x=1;y=1;
		for(i=1;i<n;i++)
		{
			if(*p==*(p+i))
				x++;
			else
				break;
		}
		for(i=n-1;i>0;i--)
		{
			if(*(p+i)==*(p+i-1))
				y++;
			else
				break;
		}
		cout<<countmin<<" "<<x*y<<endl;	
		
	}
	return 0;
}

相關推薦

Stay Hungry Stay Foolish

小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢? 輸入描述: 輸入包含多組測試資料。 對於每組測試資料: N - 本組測試資料有n個數 a1,a2...an - 需要計算的資料 保證: 1<=N<

Stay HungryStay Foolish!!!

C語言盲點 1.函式引數的求值順序依賴於編譯器,例如f(a,a++);是先求a++還是求a不一定 2.C語言中的大多數運算子對其運算元的求值順序也依賴於編譯器 警告 int i = f() * g();這裡先求f()還是先求g()不一定,所以不能寫出

Stay hungry Stay foolish

問題描述: 給定兩個字串s1和s2,要求判定s2是否能被s1迴圈移位(rotate)得到的字串包含。例如,給定字串s1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD返回false。 分析: 從問題的描述來看,最直接的方式就是對字串s

Stay hungry, Stay foolish

與此同時 順序 重要 人生 什麽 目錄 ins http 時機 喬布斯在斯坦福大學畢業演講中說過,他最喜歡的一句話叫做"Stay hungry, Stay foolish"。 "Stewart和他的人出了好幾期《地球產品目錄》(Whole Earth Catalog),然

stay hungry stay foolish.

I am honored to be with you today at your commencement from one of the finest universities in the world. I never graduated from college. Truth be told, thi

Stay Hungry Stay Foolish

設計執行緒安全的類 在設計執行緒安全類的過程中,需要包含以下三個基本要素: 找出構成物件狀態的所有變數 找出約束狀態變數的不變性條件 建立物件狀態的併發訪問管理策略 找出構成物件狀態的所有變數 分析物件的狀態,首先從物件的域開始: 如果物件所有域都是基本

bytemode stay hungry stay foolish cocos2dx渲染架構

  2dx的時代UI樹便利和渲染是沒有分開的,遍歷UI樹的時候就渲染.3dx版本為了分離了ui樹的遍歷和渲染,先遍歷生成渲染命令發到渲染佇列,之後遍歷渲染命令佇列開始渲染.這樣做的好處是渲染命令可以重用,單獨的渲染可以做優化例如自動批繪製.本篇首先介紹cocos2D-X 3.x版本的渲染結構,之後會

重溫喬布斯在斯坦福大學的經典演講------Stay Hungry, Stay Foolish

多年前, 早就把喬布斯在斯坦福大學的演講吟誦得滾瓜爛熟了, 現在還經常在嘴裡蹦出幾句經典的話語。 週末在家, 開啟視訊, 聽聽, 再次震徹人心。  剛才自己又朗讀了一遍, 還是很順暢, 朗朗上口。 最近又面臨一些變動。 面對未知, 有所期待, 無所畏懼。 來看看喬

Stay hungry,stay foolish

之前開發的微信應用需要傳遞一個引數,這個引數比較長,啟用安全狗防護之後被攔截了。 主要原因就是IIS限制了url地址的長度,預設的時2048 這個時候我們需要在web.Config中配置兩個東西 首先

【落日小屋】Stay Hungry, Stay Foolish

專欄達人 授予成功建立個人部落格專欄

stay hungry,stay foolish !

導讀:raid 5既能夠實現速度上的加倍,同時也能夠保證資料的安全性,所以在很多高端系統當中都使用這種raid模式。 raid 5是一種非常具有實用價值的raid模式,廣泛應用於各種環境中。raid 5模式工作原理: raid 5使用至少三塊硬碟來實現陣列,它既能實現rai

【Coder Ben's Writing】Stay Hungry, Stay Foolish

全領域極客,相信程式碼的魅力,對一切充滿好奇 分享知識,交流思想,收穫快樂,守住承諾,嚮往簡單生活 自此,開啟自己的部落格時代。 2016年9月22日 21:18:51

Stay hungry,stay foolish!

做遊戲開發需要具備那些知識或技能? 這是我之前在csdn上發的一個貼的名字,今天忽然想起來進行了整理。希望看到關心這方面的人有所啟示。 下面是csdner的回覆: freezezdj: 遊戲分客戶端和伺服器端。 hoya5121(老李): 與玩遊戲相比,寫遊

xiaoding133的專欄【Stay hungry,Stay foolish

1、擷取字串   擷取字串可以說是字串處理功能中最常用的一個子功能了,能夠實現擷取字串中的特定位置的一個或多個字元。舉例說明其基本功能:   @echo off   set ifo=abcdefghijklmnopqrstuvwxyz0123456789   echo 原字

Stay Hungry.Stay Foolish.

      Norman Matloff 和PeteSalzman在其著作《TheArt of Debugging, withGDB,DDD,Eclipse》中曾說過,確認原則是除錯的本質。程式設計師編寫程式是為實現特定目的,而一個程式可以由許多目的組成,除錯是確認某

Stay Hungry. Stay Foolish.

見同學在玩,沒事就開始搞 地址: 第一關: 不解釋,你懂的全選就看見了, 第二關: 右鍵html原始碼不解釋,不過注意 這個進入下一關不能點選的 第三關: 我想說的是從第三關到第五關對我來說都是用一種辦法解決的,

Stay Hungry(業精於勤拒絕平庸)

  在C++中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O,stream這個類有兩個重要的運算子:   1、插入器(<<)   向流輸出資料。比如說系統有一個預設的標準輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"Wr

Stay hungry,stay foolish.

一、先修改工程名/解決方案名舉例,原先的工程名為OldProject   想要改成NewProject1.找到工程/解決方案所在的資料夾(已工程名/解決方案名命名,即OldProject)2.開啟該資料夾,有一個OldProject.sln   將其重新命名為NewProject.sln   用記事本開啟該文

喬布斯2005年斯坦福大學畢業典禮演講原文 – Stay hungry, stay foolish

From Stanford Report, June 14, 2005 This is the text of the Commencement address by Steve Jobs, CEO of Apple Computer and of Pixar

xlnjulp Stay Hungry, Stay Foolish

GCViewer可以載入已有的GC日誌,圖形化呈現出GC的狀態,並且實時計算出一些具有代表性的資料。 下載地址 網站提供的是原始碼,需要自己進行打包,由於專案是Maven工程,因此使用Maven進行打包是最簡單的。 假設你已經安裝好了Maven, 進入GCViewer的目