日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双指针:88. 合并两个有序数组

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双指针:88. 合并两个有序数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

88. 合并兩個有序數組

解題思路

一. 合并數組后排序,時間復雜度為O((n+m)log(n+m))
代碼:
快排詳解

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int i=m,j=0;i<m+n;i++,j++){nums1[i] = nums2[j];}quickSort(nums1,0, m+n-1);}public void quickSort(int nums[], int low, int high){if(low<high){int basicIndex = qSort(nums, low, high);quickSort(nums, low, basicIndex-1);quickSort(nums, basicIndex+1, high);}}public int qSort(int nums[], int low, int high){int basic = nums[low];while(low<high){while(low<high&&nums[high]>basic)high--;nums[low] = nums[high];while(low<high&&nums[low]<=basic)low++;nums[high] = nums[low];}nums[low] = basic;return low;}}

二、利用兩個數組已經排序的特點,使用三指針,時間復雜度O(log(n+m)),執行步驟如下:

  • p1指向nums1的最大值(p1=m-1),p2指向nums2的最大值(p2=n-1),current指向當前排序的位置(從后往前排,即從大到小,current=m+n-1)
  • 從后往前排序:nums1[current] = max(nums1[p1], nums2[p2]),具體看代碼注釋
  • 動畫演示(圖作者:https://leetcode-cn.com/problems/merge-sorted-array/solution/88-by-ikaruga/):

    代碼:

    class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) { // p1指向nums1的最大值,//p2指向nums2的最大值//current指向當前排序的位置int p1 = m-1,p2 = n-1,current=m+n-1;while(current>=0&&p2>=0){//p1>=0避免nums1為空數組,即m=0的情況//從p1,p2中挑出較大的值,并移動指針if(p1>=0&&nums1[p1]>nums2[p2]){nums1[current] = nums1[p1];p1--;}else{nums1[current] = nums2[p2];p2--;}current--;}}}

    總結

    以上是生活随笔為你收集整理的双指针:88. 合并两个有序数组的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。