leetcode刷題前置知識總結

2021-10-09 14:45:08 字數 3087 閱讀 4346

1)在乙個有序陣列中,找某個數是否存在

2)在乙個有序陣列中,找》=某個數最左側的位置

3)在乙個有序陣列中,找<=某個數最右側的位置

4)區域性最小值問題

查詢乙個數是否存在:

package com.zy.class001;

public class code04_b***ist ;

system.out.println(exist(arr, 55));

}public static boolean exist(int arr, int num)

int l = 0;

int r = arr.length - 1;

int mid = 0;

while (l < r) else if (arr[mid] > num) else

}return arr[l] == num;}}

知識擴充套件:2*n         可以表示為     n<<1

2*n + 1   可以表示為    (n<<1) | 1

在乙個有序陣列中,找》=某個數最左側的位置

package com.zy.class001;

public class code05_bsnearleft ;

system.out.println(nearestindex(arr, 3));

}public static int nearestindex(int arr, int value) else

}return index;}}

區域性最小值:

package com.zy.class001;

public class code06_bsawesome

if (arr.length == 1 || arr[0] < arr[1])

if (arr[arr.length - 1] < arr[arr.length - 2])

int left = 1;

int right = arr.length - 2;

while (left < right) else if (arr[mid] > arr[mid + 1]) else

}return left;}}

相同為0   不同為1

異或運算的性質:

1)0^n == n    n^n == 0

2)異或運算滿**換律和結合律

a = a ^ b;

b = a ^ b;

a = a ^ b;

解釋:

首先a = a ^ b;

然後b = a ^ b = a ^ b ^ b = a;

最後a = a ^ b = a ^ b ^ a = b;

結果就是b = a; a = b;

乙個陣列中有一種數出現了奇數次,其他數都出現了偶數次,怎麼找到並列印這種數。

package com.zy.class001;

public class code07_eventimesoddtimes ;

printoddtimesnum1(arr);

}// arr中,只有一種數,出現奇數次

怎麼把乙個int型別的數,提取出最右側的1來

例如:11001100-》00000100

答案:n & ((~n) + 1)

乙個陣列中有兩種數出現了奇數次,其他數都出現了偶數次,怎麼找到並列印這兩種數?

解題思路:

假設出現奇數的兩個數分別是a和b,陣列中資料全部異或,必定得到a ^ b

此時找出a ^ b的最右邊為1的位置,假設在第i位置上為1,然後將陣列分為兩部分,在i位置上為1的數和i位置為0的數。

然後將在i位置為1的所有數異或,肯定能求出其中乙個數假設為a,然後a^b^a = b,則可以求出b

**為:

package com.zy.class001;

public class code07_eventimesoddtimes ;

printoddtimesnum2(arr);

}// arr中,有兩個數,出現奇數次

public static void printoddtimesnum2(int arr)

// 對於eor,必定有乙個位置上是1,那麼我們就去求最右邊為1的位置

求n中二進位制位的1的個數。

思路:每次都求出n的最右側位置的1,然後將n中最右側的1抹掉,不斷迴圈,直到n為0

package com.zy.class001;

public class bitecount

public static int bitecount(int n)

return count;}}

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...

LeetCode刷題總結

123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...