C語言初級 練習(二)

2021-10-01 18:27:36 字數 3902 閱讀 1624

6、第三大的數

給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o(n)。

示例 1:

輸入: [3, 2, 1]

輸出: 1

解釋:第三大的數是 1.

示例 2:

輸入: [1, 2]

輸出: 2

解釋:第三大的數不存在, 所以返回最大的數 2 .

示例 3:

輸入: [2, 2, 3, 1]

輸出: 1

解釋:注意,要求返回第三大的數,是指第三大且唯一出現的數。

存在兩個值為2的數,它們都排第二。

//暴力求解

intthirdmax

(int

* nums,

int numssize)

} secend = first;

third = first;

//遍歷第二遍找第二大的數

for(i =

0; i < numssize; i++)}

//如果沒有第二大得數返回最大的數

if(secend == first)

//再遍歷一遍找到第三大的數

for(i =

0; i < numssize; i++)}

return third;

}

//快速排序

intcmp

(void

* a,

void

* b)

// 非遞增

intthirdmax

(int

* nums,

int numssize)

}// 3. 查詢

return j<

2?nums[0]

:nums[2]

;}

7、最大連續1的個數

給定乙個二進位制陣列, 計算其中最大連續1的個數。

示例 1:

輸入: [1,1,0,1,1,1]

輸出: 3

解釋:開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.

注意:

輸入的陣列只包含 0 和1。

輸入陣列的長度是正整數,且不超過 10,000。

int

findmaxconsecutiveones

(int

* nums,

int numssize)

else

} max_count=max_count>count?max_count:count;

return max_count;

}

8、三個數的最大乘積

給定乙個整型陣列,在陣列中找出由三個數組成的最大乘積,並輸出這個乘積。

示例 1:

輸入: [1,2,3]

輸出: 6

示例 2:

輸入: [1,2,3,4]

輸出: 24

注意:

給定的整型陣列長度範圍是[3,104],陣列中所有的元素範圍是[-1000, 1000]。

輸入的陣列中任意三個數的乘積不會超出32位有符號整數的範圍。

int

cmp(

const

void

*a,const

void

*b)int

maximumproduct

(int

* nums,

int numssize)

9、尋找陣列的中心索引

做法:(暴力求解/首尾指標)

給定乙個整數型別的陣列 nums,請編寫乙個能夠返回陣列「中心索引」的方法。

我們是這樣定義陣列中心索引的:陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。

如果陣列不存在中心索引,那麼我們應該返回 -1。如果陣列有多個中心索引,那麼我們應該返回最靠近左邊的那乙個。

示例 1:

輸入:nums = [1, 7, 3, 6, 5, 6]

輸出: 3

解釋:索引3 (nums[3] = 6) 的左側數之和(1 + 7 + 3 = 11),與右側數之和(5 + 6 = 11)相等。

同時, 3 也是第乙個符合要求的中心索引。

示例 2:

輸入:nums = [1, 2, 3]

輸出: -1

解釋:陣列中不存在滿足此條件的中心索引。

說明:

nums 的長度範圍為 [0, 10000]。

任何乙個 nums[i] 將會是乙個範圍在 [-1000, 1000]的整數。

int

pivotindex

(int

* nums,

int numssize)

return-1

;}

10、至少是其他數字兩倍的最大數

在乙個給定的陣列nums中,總是存在乙個最大元素 。

查詢陣列中的最大元素是否至少是陣列中每個其他數字的兩倍。

如果是,則返回最大元素的索引,否則返回-1。

示例 1:

輸入: nums = [3, 6, 1, 0]

輸出: 1

解釋:6是最大的整數, 對於陣列中的其他整數,

6大於陣列中其他元素的兩倍。6的索引是1, 所以我們返回1.

示例 2:

輸入: nums = [1, 2, 3, 4]

輸出: -1

解釋:4沒有超過3的兩倍大, 所以我們返回 -1.

nums 的長度範圍在[1, 50].

每個 nums[i] 的整數範圍在 [0, 100].

int

dominantindex

(int

* nums,

int numssize)

}int num=0;

for(

int i=

0;i)++num;

}for

(int i=

0;iif(max>=max2*2)

else

return-1

;}

//排序法

struct num

;int

cmp(

const

void

* a,

const

void

* b)

intdominantindex

(int

* nums,

int numssize)

qsort

(records,numssize,

sizeof

(struct num)

,cmp);if

(records[numssize-1]

.value>=records[numssize-2]

.value*2)

else

return-1

;}

C語言初級 練習(三)

11 字母數字混合排序 吉位元2018秋 輸入一串字元,包含數字 0 9 和小寫字母 az 要求按數字從小到大,字母從a到z排序,和所有數字排在字母後面 輸入描述 一串字元 輸出描述 按規則排序的一串字元 示例1 輸入a31bz 輸出abz13 include include include int...

c語言初級

個人是乙個菜鳥,受到影響,來一篇c語言基礎 眾所周知,c語言在如今的社會,對一些工程是很有幫助的,在下哪,雖然是個土八路,就是那種自己學的,我發現這種東西必須深入下去,你才會有飯吃,學習一門技術難度係數是很大的,這不是吹牛,我哪,最喜歡的不是別的,而是專注,我以前不知道,所以學的雜亂無章,現在我覺得...

C語言日常練習(二)

1 將乙個正整數分解質因數。例如 輸入90,列印出90 233 5。思考 假設輸入乙個數n,先找到n以內所有的質數,2 3 5 7 用n最小的質數存在兩種情況 一 可以整除 那麼這個質數就是n的乙個質因數,記作i,用 n i 作為新的 n 的值,重複之前過程 二 不能整除 用下乙個質數再次嘗試,此時...