前言
因?yàn)榘l(fā)現(xiàn)拉勾上有很多心儀的公司崗位要求要會數(shù)據(jù)結(jié)構(gòu)與算法的,所以自己晚上在慢慢學(xué)習(xí) 數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)
,主要是看用C++來實(shí)現(xiàn)視頻教學(xué)叶摄。在課上老師講時(shí)間復(fù)雜度和空間復(fù)雜度是可以相互轉(zhuǎn)化的。兩個(gè)概念的理解就是:
- 空間換時(shí)間:對于執(zhí)行的慢法瑟,耗時(shí)的程序剩彬,可以通過消耗內(nèi)存(即構(gòu)造新的數(shù)據(jù)結(jié)構(gòu))來進(jìn)行優(yōu)化。
- 時(shí)間換空間:對于消耗內(nèi)存的程序弹惦,也可以多消耗時(shí)間來降低內(nèi)存的消耗否淤。
后面在講空間換時(shí)間時(shí)出了一個(gè)編程題來便于理解。題如下:
在一個(gè)由自然數(shù)0-1000中任意數(shù) 組成的一維數(shù)組中棠隐,每個(gè)數(shù)可能會出現(xiàn)零次或者多次石抡,找出一維數(shù)組中出現(xiàn)次數(shù)最多的數(shù),并將其出現(xiàn)的次數(shù)打印出來助泽!
自己對算法很陌生啰扛,當(dāng)時(shí)看到這個(gè)是想不出來用什么方法的。
思想與實(shí)現(xiàn)
思想:是以空間換取時(shí)間嗡贺,在這道編程題中就是重新構(gòu)造一個(gè)數(shù)組隐解,這個(gè)數(shù)組用來存放原數(shù)組中每個(gè)數(shù)字
出現(xiàn)的次數(shù),而這個(gè)數(shù)組中每個(gè)數(shù)的下標(biāo)是原數(shù)組中的每個(gè)數(shù)诫睬。(想通了這個(gè)的話就很簡單)
在Mac 上Visual studio code上實(shí)現(xiàn)如下:
自己還調(diào)試了一遍因?yàn)槌霈F(xiàn)次數(shù)最多的數(shù)可能有好幾個(gè)(這里有一個(gè)bug,后一方法解決了這個(gè))煞茫。
屏幕快照 2019-04-01 下午6.46.33.png
代碼:
#include<iostream>
using namespace std;
void searchMostNumber(int a[],int len){
int save[1000] = {0}; //新建一個(gè)數(shù)組 初使值為0
int max = 0; //出現(xiàn)最多數(shù)的次數(shù)
int key ; //出現(xiàn)最多的數(shù)
for(size_t i = 0; i < len; i++)
{
/* code */
int index = a[i]; //構(gòu)建新的數(shù)組 以a中值為下標(biāo),數(shù)的次數(shù)為值
save[index]++;
}
for(size_t i = 0; i < 1000; I++)
{
/* code */
if (max < save[i]) {
/* code */
max = save[i]; //取最大的次數(shù)
key = i; //取出現(xiàn)最多的數(shù)
}
}
//這一條是解決有幾個(gè)最多次數(shù)的數(shù)
for(size_t i = 0; i < 1000; I++)
{
/* code */
if (max == save[i]) {
/* code */
printf("這個(gè)數(shù)組中出現(xiàn)最多的數(shù)是:%zu,出現(xiàn)了%d次\n",i,save[i]);
}
}
}
int main()
{
int array[] = {1,3,3,2,202,202,202,202,4,7,9,34,3,3,202,202,202,202,3,7,7,7,202,202,202,202,3,3,3,202,202,202,202,101,202,199,3};
int b[] = {1,3,3,3,4,4,4}; //測試有多個(gè)最大數(shù)的情況
int lengTemp = sizeof(array)/sizeof(*array);
printf("數(shù)組array中---------");
searchMostNumber(array,sizeof(array)/sizeof(*array));
printf("數(shù)組b中---------");
searchMostNumber(b,sizeof(b)/sizeof(*b));
printf(" hello world 好好學(xué)習(xí),天天向上\n");
return 0;
}
輸出結(jié)果:
結(jié)果.png
總結(jié):
讓自己學(xué)會了在mac 上VS code的編譯
后期會繼續(xù)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法(加油~)