演算法營day1

2021-10-08 07:45:46 字數 2691 閱讀 6999

題目描述

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

思路1:

充分考慮到該二維陣列的特點,每一行是公升序的,每一列也是公升序的。通過target和矩陣右上角的元素進行比較

ps:i和j的範圍需要注意,i < array.size() && j >= 0

**:

class

solution

else

if(target >array[i]

[j])

else

return

true;}

return

false;}

};

題目描述

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

思路:

對題目中旋轉陣列進行分析,可以知道旋轉之後形成的兩部分陣列,都是非降序的(可能含有重複的元素),並且前一部分的元素是大於後一部分的元素的。二分查詢的優勢在於可以一次拋掉一半的元素。

判空處理

二分查詢步驟

class

solution

//三個值都相等的時候,就沒有辦法判斷,只能線性查詢

if(rotatearray[mid]

== rotatearray[l]

&& rotatearray[mid]

== rotatearray[r]

)return result;}if

(rotatearray[mid]

>= rotatearray[l]

)else

}return rotatearray[mid];}

};

題目描述

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變

思路:

其實還是乙個雙指標的問題,用i和k兩個指標解決問題。還用到了插入排序的思想。

**:

class

solution

array[k++

]= tmp;

//將arry[i]放在它該放的位置}}

}};

題目描述

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列**現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

思路1:

如果乙個數字出現的次數超過一半的話,那麼陣列排序後,這個數字一定會在陣列中間的位置。然後再對這個數的個數進行統計,確保題目的條件。

**1:

class

solution

return

(count >

(numbers.

size()

>>1)

)? mid_number :0;

}};

思路2:

遍歷陣列,times為0,如果兩個數不相等就相當於抵消掉,相等的話++ times,不相等的話–times。

ps:要是符合陣列的特性的話,最後times一定是大於0的

**2:

class

solution

else

if(number == numbers[i]

)else

--times;

}for

(int i =

0;isize()

;++i)

return

(count >

(numbers.

size()

>>1)

)? number :0;

}};

思路3:

hash表

**3:

class

solution);

}else

//numbers[i]一定存在

if(map[numbers[i]

]> half)

}return0;

}};

精簡**1:

class

solution

int count =0;

for(

int num : numbers)

return count > numbers.

size()

/2? mode :0;

}};

排序演算法Day1

include mysort.h include include include include include include include using namespace std 插入排序 時間複雜度 平均哦o n 2 完全有序時o n 空間複雜度o 1 穩定 思想 把待排序列分為有序序列和無...

Day1 冒泡演算法 1

bubble sort 背後的想法非常簡單,我們檢視陣列中相鄰的成對元素,一次檢視一對。如果第乙個元素大於第二個元素,則交換它們的位置,否則將它們繼續移動。def bubble sort our list for i in range len our list 1 if our list i our...

基本演算法學習day1

反轉陣列 leecode242.有效的字母異位詞 方法 建立26位的int陣列,用來存放對應第幾個字母的個數 遍歷 s讓相應的值 遍歷 t讓相應的值 最後如果陣列中有乙個值不為0則返回false 給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的字母異位詞。示例 1 輸入 s anag...