演算法 劍指offer easy的題解題思路

2021-10-23 08:59:51 字數 1786 閱讀 4545

1.劍指 offer 53 - ii. 0~n-1中缺失的數字

乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。

有順序陣列,應該找到關係使用二分查詢

class solution 

else;

}return i;

}}

2. 雙指標方法求鍊錶相交!!

劍指 offer 52. 兩個鍊錶的第乙個公共節點

/**

* definition for singly-linked list.

* public class listnode

* }*/public class solution else

if(tempb == null) else

}return tempa;

}}

3. 劍指 offer 57 - ii. 和為s的連續正數序列

輸入乙個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。

序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。

思路:使用滑動視窗

示例 1:

輸入:target = 9

輸出:[[2,3,4],[4,5]]

示例 2:

輸入:target = 15

輸出:[[1,2,3,4,5],[4,5,6],[7,8]]

class solution  else if (sum > target)  else 

res.add(arr);

// 左邊界向右移動

sum -= i;

i++;}}

return res.toarray(new int[res.size()]);

}}

4.螺旋列印陣列:

思路:上下左右的初始化,做乙個l型之後,需要做個if判斷在做下邊界的l。

因為最後應該都是上邊界的乛

class solution 

//rows 代表行號 columns代表列

int rows = matrix.length, columns = matrix[0].length;

//return的

int order = new int[rows * columns];

//總的index

int index = 0;

//左右上下,但是問題是怎麼停下來

int left = 0, right = columns - 1, top = 0, bottom = rows - 1;

//停下來的條件,左右相遇 或者上下相遇

while (left <= right && top <= bottom)

//固定列不變,輸出行資訊

for (int row = top + 1; row <= bottom; row++)

//第二次做l型的時候需要看看是否符合要求 可能已經到了結束的點了

if (left < right && top < bottom)

for (int row = bottom; row > top; row--)

}left++;

right--;

top++;

bottom--;

}return order;

}}

劍指offer面試演算法題

1.長度為n的陣列裡面的元素都在0 n 1之間,找出第乙個重複的數字 思路 從頭到尾依次遍歷,如果當前的值a i i,如果a i a a i 那麼需要把a a i 位置上的值與a i 作交換 把對的值放在對的位置 之後繼續判斷此時的a i 位置沒有移動 如果a i a a i 證明對的位置上有對的元...

leetcode演算法題 劍指Offer篇(1)

1.1 題目描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。1.2 題解 1.2.1 利用map結構public intfindrepeatnumber i...

leetcode演算法題 劍指Offer篇(13)

1.1 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。1.2 題解 1.2.1 摩爾投票法 驗證 x 是否為眾數 for int num nums if num i count return count nums.length 2?i 0 當無眾數時返回 0 2.1 題目描...