臺州網(wǎng)站推廣外包西安seo顧問公司
26. 刪除有序數(shù)組中的重復項
已解答
簡單
相關標簽
相關企業(yè)
提示
給你一個 非嚴格遞增排列 的數(shù)組 nums
,請你?原地 刪除重復出現(xiàn)的元素,使每個元素 只出現(xiàn)一次 ,返回刪除后數(shù)組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums
中唯一元素的個數(shù)。
考慮 nums
的唯一元素的數(shù)量為 k
,你需要做以下事情確保你的題解可以被通過:
- 更改數(shù)組
nums
,使nums
的前k
個元素包含唯一元素,并按照它們最初在nums
中出現(xiàn)的順序排列。nums
?的其余元素與nums
的大小不重要。 - 返回
k
?。
判題標準:
系統(tǒng)會用下面的代碼來測試你的題解:
int[] nums = [...]; // 輸入數(shù)組 int[] expectedNums = [...]; // 長度正確的期望答案int k = removeDuplicates(nums); // 調用assert k == expectedNums.length; for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i]; }
如果所有斷言都通過,那么您的題解將被 通過。
示例 1:
輸入:nums = [1,1,2] 輸出:2, nums = [1,2,_]
示例 2:
輸入:nums = [0,0,1,1,1,2,2,3,3,4] 輸出:5, nums = [0,1,2,3,4]
提示:
1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums
已按 非嚴格遞增?排列
解題思路
使用雙指針法,慢指針 i
用于記錄無重復元素的位置,快指針 j
遍歷整個數(shù)組。
代碼實現(xiàn)
/*** @param {number[]} nums* @return {number}*/
var removeDuplicates = function(nums) {if (nums.length === 0) return nums; // 如果數(shù)組為空,直接返回let i = 0; // 慢指針,指向當前唯一元素的位置for (let j = 1; j < nums.length; j++) { // 快指針,遍歷數(shù)組if (nums[j] !== nums[i]) { // 如果發(fā)現(xiàn)新元素i++; // 慢指針右移nums[i]=nums[j]; }}return i+1; // 返回修改后的數(shù)組
};
27. 移除元素
簡單
相關標簽
相關企業(yè)
提示
給你一個數(shù)組 nums
?和一個值 val
,你需要 原地 移除所有數(shù)值等于?val
?的元素。元素的順序可能發(fā)生改變。然后返回?nums
?中與?val
?不同的元素的數(shù)量。
假設 nums
中不等于 val
的元素數(shù)量為 k
,要通過此題,您需要執(zhí)行以下操作:
- 更改
nums
數(shù)組,使nums
的前k
個元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k
。
用戶評測:
評測機將使用以下代碼測試您的解決方案:
int[] nums = [...]; // 輸入數(shù)組 int val = ...; // 要移除的值 int[] expectedNums = [...]; // 長度正確的預期答案。// 它以不等于 val 的值排序。int k = removeElement(nums, val); // 調用你的實現(xiàn)assert k == expectedNums.length; sort(nums, 0, k); // 排序 nums 的前 k 個元素 for (int i = 0; i < actualLength; i++) {assert nums[i] == expectedNums[i]; }
如果所有的斷言都通過,你的解決方案將會 通過。
示例 1:
輸入:nums = [3,2,2,3], val = 3 輸出:2, nums = [2,2,_,_] 解釋:你的函數(shù)函數(shù)應該返回 k = 2, 并且 nums 中的前兩個元素均為 2。 你在返回的 k 個元素之外留下了什么并不重要(因此它們并不計入評測)。
示例 2:
輸入:nums = [0,1,2,2,3,0,4,2], val = 2 輸出:5, nums = [0,1,4,0,3,_,_,_] 解釋:你的函數(shù)應該返回 k = 5,并且 nums 中的前五個元素為 0,0,1,3,4。 注意這五個元素可以任意順序返回。 你在返回的 k 個元素之外留下了什么并不重要(因此它們并不計入評測)。
提示:
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
解題思路
慢指針 i :指向當前可以放置不等于 val 的元素的位置。?
快指針 j :遍歷數(shù)組,檢查每個元素是否等于 val 。
移動元素 :如果 nums[j] !== val ,則將 nums[j] 放到 nums[i] 的位置,并移動慢指針 i 。?
返回結果 :最終 i 的值就是不等于 val 的元素數(shù)量。
代碼實現(xiàn)
/*** @param {number[]} nums* @param {number} val* @return {number}*/
var removeElement = function(nums, val) {let i=0;//慢指針for(let j=0;j<nums.length;j++){//快指針if(nums[j]!==val){nums[i]=nums[j];i++;//指針右移}}return i;//返回不等于val的元素數(shù)量
};
66. 加一
?
給定一個由 整數(shù) 組成的 非空 數(shù)組所表示的非負整數(shù),在該數(shù)的基礎上加一。
最高位數(shù)字存放在數(shù)組的首位, 數(shù)組中每個元素只存儲單個數(shù)字。
你可以假設除了整數(shù) 0 之外,這個整數(shù)不會以零開頭。
示例?1:
輸入:digits = [1,2,3] 輸出:[1,2,4] 解釋:輸入數(shù)組表示數(shù)字 123。
示例?2:
輸入:digits = [4,3,2,1] 輸出:[4,3,2,2] 解釋:輸入數(shù)組表示數(shù)字 4321。
示例 3:
輸入:digits = [9] 輸出:[1,0] 解釋:輸入數(shù)組表示數(shù)字 9。 加 1 得到了 9 + 1 = 10。 因此,結果應該是 [1,0]。
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
解題思路
這是模擬加法的過程,和數(shù)組無關。
這道題的目標是對一個用數(shù)組表示的非負整數(shù)加一,并返回結果數(shù)組。數(shù)組的每個元素表示數(shù)字的一位,最高位在數(shù)組的首位。
思路: 從最低位開始加一 :從數(shù)組的最后一個元素(最低位)開始,逐位加一。 處理進位 :如果某一位加一后變?yōu)?10 ,則需要將這一位置為 0 ,并向高位進位。 處理最高位進位 :如果最高位也需要進位(例如 [9,9] 加一后變?yōu)?[1,0,0] ),則需要在數(shù)組的最前面插入 1
代碼實現(xiàn)
/*** @param {number[]} digits* @return {number[]}*/
var plusOne = function(digits) {for(let i=digits.length-1;i>=0;i--){if(digits[i]<9) {digits[i]++;return digits}else{digits[i]=0;}}digits.unshift(1);return digits;
};