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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 88合并两个有序数组89格雷编码

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

微信搜一搜:bigsai 專注于Java、數據結構與算法,一起進大廠不迷路!
算法文章題解全部收錄在github倉庫bigsai-algorithm,求star!
關注回復進群即可加入力扣打卡群,歡迎劃水。近期打卡:
Leetcode 76最小覆蓋子串&77組合&78子集
LeetCode 79單詞搜索&80刪除排序數組中的重復項Ⅱ&81.搜索旋轉排序數組Ⅱ
LeetCode 86分割鏈表&87擾亂字符串
如有幫助,記得一鍵三連

合并兩個有序數組

題目描述

給你兩個有序整數數組 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]

提示:

-10^9 <= nums1[i], nums2[i] <= 10^9 nums1.length == m + n nums2.length == n

這題的思路很多,你可以先拼接到num1數組然后排序。但是這個并不是特別好的方法。

首先,數組是有序的,第一個方式可以借助一個新的數組實現一趟歸并的過程。然后將數據挨個復制到num1數組中。

實現代碼為:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int index1=0;int index2=0;int a[]=new int[m+n];while (index1<m&&index2<n) {if(nums1[index1]<=nums2[index2]){a[index1+index2]=nums1[index1];index1++;}else {a[index1+index2]=nums2[index2];index2++;}}for(;index1<m;index1++){a[index1+index2]=nums1[index1];}for(;index2<n;index2++){a[index1+index2]=nums2[index2];}for(int i=0;i<m+n;i++){nums1[i]=a[i];}} }

但這種方法并不是很好,浪費的空間較多,空間怎么復用呢?

  • 如果歸并直接在sum1數組歸并的話那么會出現錯誤(前面數字可能未來得及處理就被覆蓋)。
  • 所以這里可以從后向前進行歸并啊!后面的區域一定是可以滿足使用的。


實現代碼為:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int index1=m-1;int index2=n-1;while (index1>=0&&index2>=0) {if(nums1[index1]>=nums2[index2]){nums1[index1+index2+1]=nums1[index1--];}else {nums1[index1+index2+1]=nums2[index2--];}}for(;index2>=0;index2--){nums1[index2]=nums2[index2];}} }

格雷編碼


分析
本題的話是個思維題,思想上是個貪心的思想,首先我們要分析這個數值上的關系:

  • 每次二進制只能有一位的不同。
  • 每個位上有0,1
  • 需要考慮進位問題

如果只有一位,那肯定是0,1沒問題,大部分開始從0開始也沒問題,問題是我們怎么采取什么樣方式或者策略能夠讓滿足每次只有一個數位不同呢?

  • 復用以前的不同
  • 迭代

其實這題就是每次需要考慮進位的時候,數值進位的時候前面加個1,然后從最后一個數字到第一個數字疊加到新的集合中,每進一位就要這樣迭代一次,所以數據量每次都以二倍形式增加,具體的話通過一張圖就能看懂了。


這其實就是推導n-1個和n個數集合數字之間的關系。

  • 如果n-1位集合里面數字兩兩相差為1個不同。
  • 那么n位的首先首位為0的就是n-1個數字的序列能保證。
  • n位首位為1的就是n-1位從后向前迭代相加(首位為1)

所以在具體迭代的時候就是從后向前每個數加2n 放到集合中即可。
實現代碼為:

class Solution {public List<Integer> grayCode(int n) {List<Integer>list=new ArrayList<Integer>();list.add(0);int num=1;for(int i=0;i<n;i++){int size=list.size();for(int j=size-1;j>=0;j--){list.add(list.get(j)+num);}num=num<<1; }return list;} }

ps:加上2n 并且前面的數這個位為0,所以可以使用位運算|操作就是得到相加的結果。并且這里可以根據size規律直接增加,但是為了通俗易懂這里不改了。

結語

原創不易,bigsai請你幫兩件事幫忙一下:

  • star支持一下, 您的肯定是我在平臺創作的源源動力。

  • 微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。

  • 記得關注、咱們下次再見!

    總結

    以上是生活随笔為你收集整理的LeetCode 88合并两个有序数组89格雷编码的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 天堂在线免费视频 | 男女无遮挡做爰猛烈视频 | 欧美aaa大片| 亚洲一区二区三区免费在线观看 | 国产蜜臀在线 | 久久福利在线 | 亚洲午夜小视频 | 久久99热这里只有精品 | 黄网站免费看 | 极品91尤物被啪到呻吟喷水 | 日本亚洲色大成网站www久久 | 日韩一级片网址 | 91草视频 | 国产精品zjzjzj在线观看 | 狠狠撸狠狠操 | 成人国产综合 | 日本在线观看一区二区 | 古装三级吃奶做爰 | 日韩精品少妇 | 伊人国产视频 | 少妇25p | av永久网站| 黑丝一区二区三区 | 99免费精品| 9l视频自拍蝌蚪9l视频成人 | 久久婷色 | 玖玖视频 | 操操干| 精品视频不卡 | 日本人添下边视频免费 | 无码人妻一区二区三区一 | 亚洲精品免费在线观看视频 | 亚洲嫩草影院 | 日韩欧美不卡 | 色妇网| 亚洲伊人天堂 | 99热青青草 | 中文字幕在线视频免费观看 | 国产网站免费在线观看 | 不卡av一区二区 | 男人激情网 | 天海翼一区二区 | 免费看日产一区二区三区 | 尼姑福利影院 | 极品美女穴 | 亚洲一区二区欧美 | 久久久视| 亚洲综合欧美 | 国产免费一级视频 | 九色91av| 国产视频一级 | 精品免费av | 久久久久久久久久久久久久av | 美女一级 | 69影院少妇在线观看 | 成年人午夜视频 | 国产精品伦一区二区三区免费看 | 噼里啪啦免费看 | 日韩综合中文字幕 | 丰满人妻中伦妇伦精品app | 免费暧暧视频 | 人妖一区| 精品一区二区三区免费视频 | 偷拍女澡堂一区二区三区 | 日韩 国产 一区 | 激情第一页 | 中文字幕9 | 青青草免费在线观看视频 | 精品久久影视 | 深夜小视频在线观看 | 日日夜夜狠 | 国产精品久久久久久久久久久久久久久久久久 | 6996电视影片免费看 | 草民午夜理伦三级 | 50部乳奶水在线播放 | 亚洲中文字幕无码一区二区三区 | 成人免费观看视频大全 | 国产艳妇疯狂做爰视频 | 国产精品一区二区自拍 | 精品国精品国产 | 国模私拍一区二区 | 瑟瑟综合网| 日本少妇xxxxxx | 天天综合网在线观看 | 欧美日韩国产激情 | 色网站在线观看 | av黄色成人| 亚洲免费观看 | 成人欧美一区二区三区在线播放 | www五月婷婷| 久久久黄色网 | 亚洲乱码国产乱码精品天美传媒 | 双性受孕h堵精大肚生子 | 国产尻逼视频 | 国产乱论视频 | 亚洲男女一区二区三区 | av免费观看网| 丰满秘书被猛烈进入高清播放在 | 久久综合爱 |