當題目中涉及到圓、手鍊等迴圈的,可以通過陣列的移動,乙個迴圈遍歷所有的可能。
for
(var i =
0; i < len ; i++
)
當題目求乙個滿足條件的字串時,可以利用乙個字串串長度作為迴圈條件,內部一層迴圈可以利用起始位置做迴圈,結束位置利用起始和長度計算
for
(var k =
3; k < len; k++
)}
當明顯題目要求複雜度時
放棄用函式 sort
() ,複雜度最少也要 o
(nlogn),最慢 n^2;
math.
max(
) 和 math.
min(
) 需要 o
(n) ,可以酌情使用。
用位運算做加法
獲得加法的個位數:用異或^
比如 5+7
:101
^111
=010 ,也就是個位數2 ,和不超過10的直接就是結果2+5
:010
+101
=111
;獲得進製:相當於兩個數做 & 操作,再向左移一位得到
101&
111=
101101
<<1=
1010 結果5
+7的進製是10
迴圈上面兩步,直到進製為0
function
add(num1, num2)
return num1
}
注意splice
返回的是陣列,轉數字可以簡單的直接num - '0'
.
動態規劃:最長回文字串
尋找陣列所有的逆序對,在不考慮時間複雜度的情況下,自己想的有以下幾種:但都是n^2
1、遍歷陣列,雙重迴圈進行比較
2、先對陣列arr1排序(小到大),然後對排序後的陣列arr2遍歷,找到原陣列arr1的該值的位置index,
這個index就是前面比該數大的數值個數,在arr1中刪除這個數,迴圈。。。
3、跟2一樣,只是不排序,通過找最小值來進行
function
inversepairs
(data)
return count;
}
刷題演算法小技巧
1.大數取餘 對於較大數快速取餘 引數 char s 為儲存大數的陣列 modnumber 為mod long long modnumber char s,int modnumber return sum 2.快速冪 極大數 取餘 對於較大數快速取餘 引數 a的b次方 對 c 取餘 long lon...
程式設計小技巧
define conn x,y x y define tochar x x define tostring x x x y表示什麼?表示x連線y,舉例說 int n conn 123,456 結果就是n 123456 char str conn asdf adf 結果就是 str asdfadf 怎...
程式設計小技巧
1.如何通過輸入一組任意長度的數字序列?char inchar n int num n int i 0 int len 0 scanf s inchar len strlen inchar printf len d len for i 0 i 2.scanf gets 與getchar 的區別 ge...