bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

【Java算法】數組合并去重算法-創新互聯

文章目錄
  • 刪除有序數組重復項
  • 刪除特定值
  • 有序數組合并
  • 鏈表去重合并算法

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊網站空間、營銷軟件、網站建設、井岡山網站維護、網站推廣。刪除有序數組重復項

由于數組是有序的,因此只要判斷當前數組元素是否與下一個數組元素相等即可,如果相等,那么就繼續向后遍歷,直到遇到一個不相等的。然后我們可以將這個不相等的,覆蓋到第一個重復元素的位置處,這樣子就能在不創建一個臨時數組的情況下,直接在原數組進行拷貝了。

遇到這種數組去重,刪特定值的時候,并且要求不能有新數組,那么一般可以考慮雙指針。
也就是定義兩個指針,一個slow指針,表示的是不重復元素下一次可以插入的位置,fast用于遍歷數組,找出不重復元素。

這里從下標1開始或者從下標0開始都是可以的。

public int removeDuplicates(int[] nums) {
        int n = nums.length;
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast< n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }
刪除特定值

既然也是不能創建臨時數組,那么就要考慮把特定值給他覆蓋掉。
由于要求刪除數組中等于 val 的元素,因此輸出數組的長度一定小于等于輸入數組的長度,我們可以把輸出的數組直接寫在輸入數組上。可以使用雙指針:右指針fast指向當前將要處理的元素,左指針slow指向下一個將要賦值的位置。

如果右指針指向的元素不等于 val,它一定是輸出數組的一個元素,我們就將右指針指向的元素復制到左指針位置,然后將左右指針同時右移;

如果右指針指向的元素等于 val,它不能在輸出數組里,此時左指針不動,右指針右移一位。
也就是,如果遍歷的指針(右指針)遇到的值等于val,那么直接忽略,但是如果遇到的值不是,那么就把這個值覆蓋到左指針指向的位置。

public int removeElement(int[] nums, int val) {
        int slow = 0;//雙指針 slow代表的是非val值可以插入的下一個位置
        int fast = 0;//fast用于遍歷
        int n=nums.length;
        while (fast
有序數組合并

已知兩個有序數組,其中第一個有序數組的元素個數為m,第二個有序數組的個數為n。
因此為了能在第一個數組上直接對兩個數組進行合并,那么第一個數組的大小應該設定為m+n,也就是合并之后的總大小。
之后,就可以開始考慮如何把兩個數組進行合并了。其中第一個數組的尾部的數據均為0,長度為n。
大致如下
輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
解釋:需要合并 [1,2,3] 和 [2,5,6] 。
合并結果是 [1,2,2,3,5,6] ,其中斜體加粗標注的為 nums1 中的元素。
考慮到當前數組1的尾部有空余元素,因此可以考慮尾插法,從兩個數組的有效數據的尾部開始遍歷,把更大的數據放在數組的尾部,這樣子就能節省一個臨時數組了。

//    public static void merge(int[] nums1, int m, int[] nums2, int n) {
//        for (int i=m,j=0;i= 0 || p2 >= 0) {
            if (p1 == -1) {
                cur = nums2[p2--];
            } else if (p2 == -1) {
                cur = nums1[p1--];
            } else if (nums1[p1] >nums2[p2]) {
                cur = nums1[p1--];
            } else {
                cur = nums2[p2--];
            }
            nums1[tail--] = cur;
        }
    }
鏈表去重合并算法

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

網站標題:【Java算法】數組合并去重算法-創新互聯
文章來源:http://vcdvsql.cn/article26/csidcg.html

成都網站建設公司_創新互聯,為您提供面包屑導航虛擬主機網站收錄電子商務網站設計小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯