国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法通關(guān)村第3關(guān)【青銅】| 不簡單的數(shù)組增刪改查

這篇具有很好參考價值的文章主要介紹了算法通關(guān)村第3關(guān)【青銅】| 不簡單的數(shù)組增刪改查。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.?創(chuàng)建數(shù)組

        //第一種創(chuàng)建和初始化的方法
        int[] arr = new int[10];
        
        //第二種創(chuàng)建和初始化的方法
        int[] arr2 = new int[]{0, 1, 2, 3, 5, 6, 8};
        System.out.println("arr2:" + Arrays.toString(arr2));

        //第二種方式的簡化版本:
        int[] arr3 = {2, 5, 0, 4, 6, -10};
        System.out.println("arr3" + Arrays.toString(arr3));

2.?查找一個元素

找到目標(biāo)位置

public static int findByElement(int[] arr, int size, int key) {
        for (int i = 0; i < size; i++) {
            if (arr[i] == key)
                return i;
        }
        return -1;
    }

3.?插入一個元素

先找到目標(biāo)位置,再后移插入

public static int add(int[] arr, int size, int element) {
        //size和arr.length都表示元素的數(shù)量,都是從1開始編號
        if (size >= arr.length)
            throw new IllegalArgumentException("Add failed. Array is full.");
        int index = size;
        for(int i = 0;i<size;i++){
            if (element<arr[i]){
                index = i;
                break;
            }
        }
        for(int i = size;i>index;i--){
            arr[i] = arr[i-1];
        }
        arr[index] = element;
        return index;

    }

也可以邊遍歷邊移動元素

public static int add(int[] arr, int size, int element) {
        //size和arr.length都表示元素的數(shù)量,都是從1開始編號
        if (size >= arr.length)
            throw new IllegalArgumentException("Add failed. Array is full.");
        int i;
        for(i = size;i>0;i--){
            if (element<arr[i-1]){
                arr[i] = arr[i-1];
            }else {
                arr[i] = element;
                return i;
            }
        }
        arr[i] = element;
        return i;
    }

4.刪除一個元素

先找到目標(biāo)位置,再覆蓋

public static int removeByElement(int[] arr, int size, int key) {
        int index = -1;
        for (int i = 0; i < size; i++) {
            if (arr[i] == key) {
                index = i;
                break;
            }
        }
        size--;
        if (index != -1) {
//            for (int i = index + 1; i < size; i++)
//                arr[i - 1] = arr[i];
//            size--;
            for (int i = index;i<size;i++){
                arr[i] = arr[i+1];
            }
        }
        return size;
    }

5.?題目:判斷單調(diào)數(shù)組

算法通關(guān)村第3關(guān)【青銅】| 不簡單的數(shù)組增刪改查,算法,算法,java,開發(fā)語言

?思路:

題目提示已經(jīng)很清楚,只需循環(huán)兩次分別判斷是不是遞增或者遞減的,都不是就返回false。

也可以只遍歷一次,當(dāng)一次循環(huán)中既遇到遞增又遇到遞減情況就返回false。

class Solution {
    public boolean isMonotonic(int[] nums) {
        boolean isIncreasing = true;
        boolean isDeclining = true;
        for(int i = 1;i<nums.length;i++){
            if(nums[i]>=nums[i-1]){
                continue;
            }else{
                isIncreasing = false;
            }
        }
        for(int i = 1;i<nums.length;i++){
            if(nums[i]<=nums[i-1]){
                continue;
            }else{
                isDeclining = false;
            }
        }
        return isDeclining|isIncreasing;
    }
}

6.?題目:合并兩個有序數(shù)組?

算法通關(guān)村第3關(guān)【青銅】| 不簡單的數(shù)組增刪改查,算法,算法,java,開發(fā)語言

思路:

(1)直接將B數(shù)組拼接到A數(shù)組后面,然后排序,但是這樣不符合面試官出題考察點(diǎn)

(2)新建一個數(shù)組C,然后依次有序插入,有待優(yōu)化空間

(3)從小往大判斷,依次將元素后移,但是這樣時間復(fù)雜度不夠好,思考有沒有什么優(yōu)化的方法,想A數(shù)組后面是無元素空著的能不能從后面插入,自然就想到從大往小插入。文章來源地址http://www.zghlxwxcb.cn/news/detail-654027.html

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

到了這里,關(guān)于算法通關(guān)村第3關(guān)【青銅】| 不簡單的數(shù)組增刪改查的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法通關(guān)村第十六關(guān):青銅挑戰(zhàn)-滑動窗口其實(shí)很簡單

    算法通關(guān)村第十六關(guān):青銅挑戰(zhàn)-滑動窗口其實(shí)很簡單

    1. 滑動窗口基本思想 數(shù)組引入雙指針的背景: 很多算法會大量移動數(shù)組中的元素,頻繁移動元素會導(dǎo)致執(zhí)行效率低下或者超時,使用兩個變量能比較好的解決很多相關(guān)問題 數(shù)組雙指針,之前介紹過 對撞型 和 快慢型 兩種,滑動窗口思想就是快慢型的特例 滑動窗口 示例:

    2024年02月09日
    瀏覽(27)
  • 算法通關(guān)村|青銅挑戰(zhàn)----鏈表

    前言:數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ):創(chuàng)建+增刪改查 學(xué)習(xí)目標(biāo):單鏈表的創(chuàng)建+增刪改查,雙鏈表的創(chuàng)建+增刪改查 數(shù)據(jù)域+指針域 數(shù)據(jù)域:當(dāng)前節(jié)點(diǎn)的元素值 指針域:當(dāng)前節(jié)點(diǎn)保存的下一個節(jié)點(diǎn)的元素的地址,其中最后一個元素的指針域指向null 標(biāo)準(zhǔn)的面向?qū)ο蟮墓?jié)點(diǎn)的定義: LeetCode中節(jié)

    2024年02月15日
    瀏覽(18)
  • [Go版]算法通關(guān)村第一關(guān)青銅——鏈表青銅挑戰(zhàn)筆記

    [Go版]算法通關(guān)村第一關(guān)青銅——鏈表青銅挑戰(zhàn)筆記

    單向鏈表圖示: 雙向鏈表圖示: 環(huán)形單向鏈表圖示: 環(huán)形雙向鏈表圖示: 源碼地址: GitHub-golang版本 如果是單向的,需要將當(dāng)前節(jié)點(diǎn) 定位到要插入節(jié)點(diǎn)的前一個節(jié)點(diǎn) ,否則一旦過了將無法回頭找到前一個節(jié)點(diǎn) 如果是雙向的,將當(dāng)前節(jié)點(diǎn) 定位到要插入節(jié)點(diǎn)的前一個節(jié)點(diǎn)、

    2024年02月13日
    瀏覽(21)
  • 《算法通關(guān)村第一關(guān)——鏈表青銅挑戰(zhàn)筆記》

    《算法通關(guān)村第一關(guān)——鏈表青銅挑戰(zhàn)筆記》

    鏈表中每個結(jié)點(diǎn)內(nèi)部的“生態(tài)環(huán)境”。 數(shù)據(jù)域存儲元素的值,指針域存放指針。 示例: c語言構(gòu)造鏈表 可分為三步 1.創(chuàng)建頭指針。 2.創(chuàng)建頭結(jié)點(diǎn),使頭指針指向頭結(jié)點(diǎn)。 3.循環(huán)創(chuàng)建結(jié)點(diǎn),并使前一個結(jié)點(diǎn)指向當(dāng)前結(jié)點(diǎn)。 1.)創(chuàng)建結(jié)點(diǎn)。 2.)使前一個結(jié)點(diǎn)指向當(dāng)前結(jié)點(diǎn)。 3.)

    2024年02月15日
    瀏覽(27)
  • 算法通關(guān)村第一關(guān)-鏈表青銅挑戰(zhàn)筆記

    算法通關(guān)村第一關(guān)-鏈表青銅挑戰(zhàn)筆記

    平時我們一般都是用數(shù)組,每個數(shù)組都會有一個相對應(yīng)的索引,這樣就使得數(shù)組能夠方便的調(diào)用出對應(yīng)索引得到需要的數(shù)據(jù),但是這也造成了一個問題,那就是不好在數(shù)組中插入或者刪除一個數(shù)據(jù),例如 int arr[]={1,2,4,5}如果我想在數(shù)組中的2和4中添加一個數(shù)據(jù)3 那么我們首先就

    2024年02月15日
    瀏覽(25)
  • 算法通關(guān)村第一關(guān)--鏈表青銅挑戰(zhàn)筆記

    算法通關(guān)村第一關(guān)--鏈表青銅挑戰(zhàn)筆記

    開始時間:2023年7月16日20:45:26 什么是鏈表,鏈表是一種通過指針串聯(lián)在一起的線性結(jié)構(gòu),每一個節(jié)點(diǎn)由兩部分組成,一個是數(shù)據(jù)域一個是指針域(存放指向下一個節(jié)點(diǎn)的指針),最后一個節(jié)點(diǎn)的指針域指向null(空指針的意思)。 鏈表的入口節(jié)點(diǎn)稱為鏈表的頭結(jié)點(diǎn)也就是hea

    2024年02月17日
    瀏覽(29)
  • 算法通關(guān)村第一關(guān) | 鏈表青銅挑戰(zhàn)筆記

    算法通關(guān)村第一關(guān) | 鏈表青銅挑戰(zhàn)筆記

    一、 什么是鏈表? 鏈表是一種比較簡單、很常見的數(shù)據(jù)結(jié)構(gòu),是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。 二、鏈表的特點(diǎn) 鏈表是一種比較簡單、很常見的數(shù)據(jù)結(jié)構(gòu),是線性表(List)的一種,是一種物理存

    2024年02月14日
    瀏覽(24)
  • 算法通關(guān)村第一關(guān)———鏈表青銅挑戰(zhàn)筆記

    算法通關(guān)村第一關(guān)———鏈表青銅挑戰(zhàn)筆記

    通過類來構(gòu)建節(jié)點(diǎn),用next指針將節(jié)點(diǎn)連起來。 會有插入位置的范圍問題,不能超出鏈表范圍 會有刪除位置的范圍問題 構(gòu)造雙向鏈表 插入和刪除都有三種情況,頭中尾 ?

    2024年02月15日
    瀏覽(25)
  • 算法通關(guān)村第一關(guān)——鏈表青銅挑戰(zhàn)筆記

    算法通關(guān)村第一關(guān)——鏈表青銅挑戰(zhàn)筆記

    鏈表的基本單元就是 節(jié)點(diǎn) ,也就是說鏈表是由一個一個節(jié)點(diǎn)構(gòu)成的。 而對于節(jié)點(diǎn)來說,里面至少會包含一個 指針 和一個 數(shù)據(jù)元素 ,也就是如下圖所示: 其中數(shù)據(jù)域用來存放數(shù)據(jù)元素,指針域用來存放指向下一個節(jié)點(diǎn)的指針,這樣一個一個連接起來的就是鏈表。如下圖所

    2024年02月16日
    瀏覽(27)
  • 編程導(dǎo)航算法通關(guān)村第一關(guān)|青銅|鏈表基礎(chǔ)

    編程導(dǎo)航算法通關(guān)村第一關(guān)|青銅|鏈表基礎(chǔ)

    JVM有棧區(qū)和堆區(qū) 棧區(qū):存引用,就是指向?qū)嶋H對象的地址。。 堆區(qū):存的是創(chuàng)建的對象。 定義 規(guī)范的鏈表定義 LeetCode算法題中常用 遍歷 插入 刪除 結(jié)點(diǎn) 結(jié)構(gòu)遍歷 插入 從頭插入 從尾插入 從某個值為key的節(jié)點(diǎn)后面插入 刪除 刪除頭結(jié)點(diǎn) 刪除尾結(jié)點(diǎn) 按值刪除

    2024年02月15日
    瀏覽(52)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包