力扣第88、100題

力扣第88、100題

88、合併兩個有序數組

給你兩個有序整數數組 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成爲一個有序數組。

說明:

初始化 nums1 和 nums2 的元素數量分別爲 m 和 n 。
你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來保存 nums2 中的元素。

示例:

輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3

輸出: [1,2,2,3,5,6]

解題思路

雙指針,從後往前進行

我們可以定義三個指針,一個用來存放排序後的數組,一個用來記錄第一個數組的數字移動,另一個用來記錄第二個數組的主子的移動,初始化,先將所有的指針都指向其對應數組的末尾,當第一個或者第二個的末尾的數字較大時,我們將這個大的放在存放數組的末尾,然後指針往前移動,依次進行,直到最後!

代碼:

class Solution {
  public void merge(int[] nums1, int m, int[] nums2, int n) {
      int p1=m-1;
      int p2=n-1;
      int p=m+n-1;

      while((p1>=0)&&(p2>=0))
      nums1[p--]=(nums1[p1]<nums2[p2]?nums2[p2--]:nums1[p1--]);
      System.arraycopy(nums2,0,nums1,0,p2+1);
  }
}

100、相同的樹

給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。

示例 1:

輸入: 1 1
/ \ /
2 3 2 3

    [1,2,3],   [1,2,3]

輸出: true

示例 2:

輸入: 1 1
/
2 2

    [1,2],     [1,null,2]

輸出: false

示例 3:

輸入: 1 1
/ \ /
2 1 1 2

    [1,2,1],   [1,1,2]

輸出: false

解題思路:

這是題算是數據結構中有關樹的一個最基本的題目了,這裏使用的是一種遞歸的方法,就是簡單的判斷兩棵樹的狀態,判斷他的左孩子和右孩子是否相同,然後把他們分別當作父節點,繼續往下進行遍歷,直到結束!

代碼:

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p==null&&q==null)
        return true;
        if(p==null||q==null)
        return false;
        if(p.val!=q.val)
        return false;
        return isSameTree(p.right,q.right)&&isSameTree(p.left,q.left);
    }
}

關注公衆號:奈斯雜文 菜鳥小謝帶你學習java和算法

1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章