演算法 常規題

2021-06-16 22:32:12 字數 2542 閱讀 7454

題目描述

實現函式 atoi 。函式的功能為將字串轉化為整數

解題思路

1. 字元和int可以互轉   『9』 - 『0』 = 9

2. int的臨界值

public class test6 

for (int i = index; i < ss.length; i++)

result = sign * s + result * 10;

if (result > integer.max_value)

return integer.max_value;

if (result < integer.min_value)

return integer.min_value;

}return (int) result;

}}

「回文」是指正讀反讀都能讀通的句子。"回文數"是一種數字。如:98789

題目描述

在不使用額外的記憶體空間的條件下判斷乙個整數是否是回文數字

解題思路

使用 % 取低位,使用 / 取 最高位

數值去著去尾

x = x % div / 10;

div /= 100;

public class test9 

if (x < 10)

int div = 1;

int len = 0;

while (x / div >= 10)

for (int i = 0; i < len / 2 + 1; i++)

x = x % div / 10;

div /= 100;

}return true;

}}

題目描述

給出乙個有n個元素的陣列s,s中是否有元素a,b,c滿足a+b+c=0?找出陣列s中所有滿足條件的三元組。

注意:三元組(a、b、c)中的元素必須按非降序排列。(即a≤b≤c)

解集中不能包含重複的三元組。

解題思路

對陣列進行排序

選擇a為推進點

為什麼選擇a為推薦點呢?不用b呢?

假設有一陣列 a0,a1,a2,b1,b2,b3,c1,c2,c3

當a=a0時 n(b+c) = f1(a1,a2,b1,b2,b3,c1,c2,c3)

當a=a1時 n(b+c) = f2(a2,b1,b2,b3,c1,c2,c3)

f1集合包含f2集合

當b=b1,n(a+c) = f1( a0,a1,a2) + f1(b2,b3,c1,c2,c3)

當b=b2,n(a+c) = f2( a0,a1,a2,b1) + f1(b3,c1,c2,c3)

f1集合交集f2集合

因此選擇a為推進點更明確

public class test14 

int left = i + 1;

int right = len - 1;

while (left < right ) else if (result > 0) else }}

}return res;

}}

題目描述

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

解題思路

位運算中異或的性質:兩個相同數字異或=0,乙個數和0異或還是它本身

1.當只有乙個數出現一次時,我們把陣列中所有的數,依次異或運算,最後剩下的就是落單的數,因為成對兒出現的都抵消了。

2.依照這個思路,我們來看兩個數(我們假設是ab)出現一次的陣列。我們首先還是先異或,剩下的數字肯定是a、b異或的結果,

3.這個結果的二進位制中的1,表現的是a和b的不同的位。我們就取第乙個1所在的位數,假設是第3位,接著把原陣列分成兩組,分組標準是第3位是否為1。

4.如此,相同的數肯定在乙個組,因為相同數字所有位都相同,而不同的數,肯定不在一組。然後把這兩個組按照最開始的思路,依次異或,剩餘的兩個結果就是這兩個只出現一次的數字。

public class test5 

int bitresult = 0;

for(int i = 0; i < length; ++i)

int index = findfirst1(bitresult);

for(int i = 0; i < length; ++i)else}}

private int findfirst1(int bitresult)

return index;

}private boolean isbit1(int target, int index)

}

常規排序演算法總結

首先推薦乙個學習資料結構的優秀的視覺化 主要總結以下6種排序演算法,其中插入排序 選擇排序 歸併排序 快速排序。1.氣泡排序 bubble sort 和快速排序 quick sort 和隨機快速排序 random quick sort 博文待寫 2.插入排序 insertion sort 和希爾排序...

各種常規排序演算法總結

基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子表中的適當位置,直到全部記錄插入完成為止。常規插入排序分兩種,即直接插入排序和希爾排序。假設待排序的記錄放在陣列r 0.n 1 中,排序過程的某一中間時刻,r被劃分成兩個子區間r 0.i 1 和r i.n 1 其中 前乙個區間...

分類演算法的常規流程?

分類演算法有很多,邏輯回歸 svm等,總結其操作,無非是在幹下面幾件事 一 找到要用於分類的模型 記錄筆記 模型函式公式 函式可調引數 w,b,之類的 二 找到優化模型的方法 學習內容 各種優化方法 求最大 最小什麼的來達到最優解 記錄筆記 針對各個函式可調引數要採用的迭代更新公式 三 敲 1 要自...