聯想 YOGA Pad Pro 平板電腦 ZUI 13.1 OTA 4 內測招募開始:支援平行視窗新架構
阿新 • • 發佈:2022-03-22
這道題目我本來是不想寫的,主要是最近學校課程的作業有了這個,先宣告,本人目前大一,專業是軟體工程,現在學校的課程是資料結構,但是我已經提前學習了Java已經部分的javaweb(css,servlet,jdbc,js,jsp)等,這個題目如果按照正常的學習過程來說(沒學棧),大部分人的思路我相信都是找到值為val的元素,然後再通過後面的資料前移來完成資料的刪除,但是這樣會使得整個時間複雜度會變成O(n2),在這裡我們不妨想想我們是不是之前有過一個用另外一個數組來存值不為val的方式來實現刪除,比如if(nums[i]!=val) att[k++]=nums[i]; 但是這個寫下去的話,空間複雜度就不太好,這裡我們就需要靈活應用棧的思想來完成,後面等課程輕鬆下來我也會分享我的一些servlet和jdbc和js的學習,希望各位大佬能夠指點一下菜鳥的程式碼
題目:
給你一個數組 nums
和一個值 val
,你需要 原地 移除所有數值等於 val
的元素,並返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須僅使用 O(1)
額外空間並 原地 修改輸入陣列。
元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
說明:
為什麼返回數值是整數,但輸出的答案是陣列呢?
請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。
你可以想象內部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參作任何拷貝 int len = removeElement(nums, val); // 在函式裡修改輸入陣列對於呼叫者是可見的。 // 根據你的函式返回的長度, 它會打印出陣列中 該長度範圍內 的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }
示例 1:
輸入:nums = [3,2,2,3], val = 3 輸出:2, nums = [2,2] 解釋:函式應該返回新的長度 2, 並且 nums中的前兩個元素均為 2。你不需要考慮陣列中超出新長度後面的元素。例如,函式返回的新長度為 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也會被視作正確答案。
示例 2:
輸入:nums = [0,1,2,2,3,0,4,2], val = 2 輸出:5, nums = [0,1,4,0,3] 解釋:函式應該返回新的長度5
, 並且 nums 中的前五個元素為0
,1
,3
,0
, 4。注意這五個元素可為任意順序。你不需要考慮陣列中超出新長度後面的元素。
提示:
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
原始碼:
class Solution { public int removeElement(int[] nums, int val) { int top = 0; for(int i = 0;i < nums.length;i++ ) { if(nums[i] != val) nums[top++] = nums[i]; } return top; } }
當菜鳥的第二天 2022-03-24