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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

90%的人都不会做的一道笔试题

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 90%的人都不会做的一道笔试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關注Java后端技術全棧

回復“面試”獲取全套大廠面試資料

數組操作的題目,有的確實比較容易,但并非每個問題都是如此。今天就來看道90%的人都不會做的筆試題。請看題:

給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素,并返回移除后數組的新長度。

不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。

元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。

示例:

給定 nums = [3,1,4,3], val = 3,函數應該返回新的長度 2,并且 nums 中的前兩個元素均為 2。

你不需要考慮數組中超出新長度后面的元素。

請暫時不要看下面,先思考一下,有沒有解答思路。

解題思路

現在考慮數組包含很少的要刪除的元素的情況。例如,num=[1,2,3,5,4],Val=4。按照很多人的思維會對前四個元素進行復制操作,其實咱們沒必要對前四個元素做復制操作。另一個例子是 num=[4,1,2,3,5],Val=4。也似乎沒有必要將 [1,2,3,5][1,2,3,5] 這幾個元素左移一步,因為問題描述中提到元素的順序可以更改。

實現

當我們遇到 nums[i] = val 時,我們可以將當前元素與最后一個元素進行交換,并釋放最后一個元素。這實際上使數組的大小減少了 1。

請注意,被交換的最后一個元素可能是您想要移除的值。但是不要擔心,在下一次迭代中,我們仍然會檢查這個元素。

最多遍歷 n 步。在這個方法中,賦值操作的次數等于要刪除的元素的數量。因此,如果要移除的元素很少,效率會更高。

代碼如下:

????public?static?int?removeElement(int[]?nums,?int?val)?{if(nums?==?null){return?0;}int?i?=?0;int?n?=?nums.length;while?(i?<?n)?{//如果相等//(注意當當前元素是5的時候,此時i并沒有加1)if?(nums[i]?==?val)?{//當前這個位置nums[i]?=?nums[n?-?1];//數組大小減1n--;}?else?{i++;}}return?n;}

測試

場景1:數組為null;

????public?static?void?main(String[]?args)?{int[]?nums?=null;?int?val?=?5;System.out.println(removeElement(nums,?val));}

結果

場景2:數組中只有一個5

?public?static?void?main(String[]?args)?{?int[]?nums?={5};?int?val?=?5;System.out.println(removeElement(nums,?val));}

結果

場景三:數組中有一個5

public?static?void?main(String[]?args)?{?int[]?nums?={1,?3,?5,?6};?int?val?=?5;System.out.println(removeElement(nums,?val)); }

結果

場景4:數組中有多個5

public?static?void?main(String[]?args)?{?int[]?nums?={1,?3,?5,5,?6};?int?val?=?5;System.out.println(removeElement(nums,?val)); }

結果:

場景4:數組中沒有5

public?static?void?main(String[]?args)?{?int[]?nums?={1,?3,?4,?6};?int?val?=?5;System.out.println(removeElement(nums,?val)); }

結果

場景5:數組的最后一個元素是5

public?static?void?main(String[]?args)?{?int[]?nums?={1,?3,?4,?5};?int?val?=?5;System.out.println(removeElement(nums,?val)); }

結果

場景6:數組中有多個5,并且最后一個元素是5

public?static?void?main(String[]?args)?{int[]?nums?=?{1,?3,?5,?6,?8,?9,?5,?5};int?val?=?5;System.out.println(removeElement(nums,?val)); }

結果

最后一種場景:數組中全是5

public?static?void?main(String[]?args)?{int[]?nums?=?{5,?5,?5,?5};int?val?=?5;System.out.println(removeElement(nums,?val)); }

結果

ok,以上幾種場景都涉及到了,并且結果正確。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的90%的人都不会做的一道笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。

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