力扣 (LeetCode)-合并兩個有序鏈表,刪除排序數(shù)組中的重復(fù)項,JavaScript筆記
Github來源:力扣 (LeetCode)|刷題打卡 | 求星星 ? | 給個??關(guān)注,??點贊,??鼓勵一下作者
[已開啟]任務(wù)一:刷題打卡 * 10 篇
大家好,我是魔王哪吒,很高興認(rèn)識你~~
哪吒人生信條:如果你所學(xué)的東西 處于喜歡 才會有強(qiáng)大的動力支撐。
每天學(xué)習(xí)編程,讓你離夢想更新一步,感謝不負(fù)每一份熱愛編程的程序員,不論知識點多么奇葩,和我一起,讓那一顆四處流蕩的心定下來,一直走下去,加油,2021加油!歡迎關(guān)注加我vx:xiaoda0423,歡迎點贊、收藏和評論
時間:3 月 1 日 ~ 3 月 13 日
力扣 (LeetCode)-兩數(shù)之和,有效的括號,兩數(shù)相加|刷題打卡-3月1日
前言
如果這篇文章有幫助到你,給個??關(guān)注,??點贊,??鼓勵一下作者,接收好挑戰(zhàn)了嗎?文章公眾號首發(fā),關(guān)注 程序員哆啦A夢 第一時間獲取最新的文章
??筆芯??~
21. 合并兩個有序鏈表
一、題目描述
將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。
示例 1:
輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
輸入:l1 = [], l2 = []
輸出:[]
輸入:l1 = [], l2 = [0]
輸出:[0]
二、思路分析
使用遞歸來解,將兩個鏈表頭部較小的一個與剩下的元素合并,并返回排好序的鏈表頭,當(dāng)兩條鏈表中的一條為空時終止遞歸。 逐一比較最小
三、答案代碼
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
// 創(chuàng)建一個空的鏈表
let curr = new ListNode();
// 創(chuàng)建一個頭
let dummy = curr;
while(l1!== null && l2 !==null){
// 判斷那個鏈表的值小,把小的連接起來
if(l1.val<l2.val){
curr.next = l1;
l1 = l1.next;
}else{
curr.next = l2;
l2= l2.next
}
curr = curr.next;
}
if(l1!==null){
curr.next = l1;
}
if(l2!==null){
curr.next = l2;
}
return dummy.next;
};
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
const mergeTwoLists = function (l1, l2) {
if (l1 === null) {
return l2;
}
if (l2 === null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};
知識補(bǔ)充
JavaScript筆記
變量
JavaScript的類型有數(shù)字,字符串,布爾值,函數(shù)和對象,還有undefined和null,數(shù)組,日期,正則表達(dá)式。
在
JavaScript中,使用關(guān)鍵字var,而不必指定變量類型,所以,JavaScript不是強(qiáng)類型語言。
typeof操作符返回變量或表達(dá)式的類型
console.log(typeof num); // number
console.log(typeof 'jeskson'); // string
console.log(typeof true); // boolean
console.log(typeof [1,2,3]); // object
console.log(typeof {name:'jeskson'}); // object
JavaScript支持delete操作符,可以刪除對象里的屬性
var my = {name: 'jeskson', age: 1};
delete my.age;
console.log(my); // {name: 'jeskson'}
真假
nudefined // false
null // false
布爾值 // true為true,false為false
數(shù)字 // +0,-0和NaN都為false,其他為true
字符串 // 如果字符串是空的就是false,其他為true
對象 // true
JavaScript面向?qū)ο缶幊?/section>
a. var obj = new Object();b. var obj = {}
obj = {
name: 'jeskson'
age: 1
};
面向?qū)ο缶幊?strong>OOP,對象是類的實例,一個類定義了對象的特征
在原型的中,函數(shù)只會創(chuàng)建一次,在所有實例中共享,如果在類的定義里聲明,會在每個實例都會創(chuàng)建自己的函數(shù)副本,使用原型方法可以節(jié)約內(nèi)存和降低實例化的開銷。原型方法只能聲明公共函數(shù)和屬性,而類定義可以聲明只在類的內(nèi)部訪問的私有函數(shù)和屬性。
ECMAScript是一種腳本語言規(guī)范,JavaScript是這個規(guī)范的一個實現(xiàn)。
ECMAScript6的功能
let和const模板字面量 解構(gòu) 展開操作符 箭頭函數(shù) =>類
ES6引入了一個let關(guān)鍵字,可以直接把var關(guān)鍵字都替換成let,ES6還引入了const關(guān)鍵字,區(qū)別于const`定義的變量是只讀的,也就是常量。
模板字面量:模板字面量用一對 ` 包裹。要插入變量的值,只要把變量放在${}里就可以了,模板字面量也可以用于多行的字符串
箭頭函數(shù):
let circleArea = (r) => 3.14 * r * r;
函數(shù)的參數(shù)默認(rèn)值:
function sum (x = 1, y = 2, z = 3) {
return x + y + z
};
console.log(sum(4,2)); //輸出9
聲明展開和剩余參數(shù):
在 ES5中,我們可以用apply()函數(shù)把數(shù)組轉(zhuǎn)化為參數(shù)ES6有了展開操作符(...)在函數(shù)中,展開操作符( ...)也可以代替arguments,當(dāng)作剩余參數(shù)使用
console.log(sum(...params));
console.log(sum.apply(undefined, params));
function da(x, y, ...a) {
return (x + y) * a.length;
}
function da(x, y) {
var a = Array.prototype.slice.call(arguments, 2);
return (x + y) * a.length;
}
數(shù)組解構(gòu):
可以用來一次初始化多個變量 可以用來進(jìn)行值的互換,而不需要創(chuàng)建臨時變量
對象解構(gòu):
var [x, y] = ['a', 'b'];
var obj = { x, y };
console.log(obj); // { x: "a", y: "b" }
方法屬性:
var hello = {
name : 'dada魔王哪吒',
printHello() {
console.log('Hello');
}
}
var hello = {
name: 'dada魔王哪吒',
printHello: function printHello() {
console.log('Hello');
}
};
使用類進(jìn)行面向?qū)ο缶幊?
function dada(name, age) {
this.name = name;
this.age = age;
}
dada.prototype.printWork = function() {
console.log(this.name);
};
class dada {
// 聲明一個有constructor函數(shù)
constructor(name, age) {
this.name = name;
this.age = age;
}
printWork() {
console.log(this.name);
}
}
繼承
可以使用extends關(guān)鍵字?jǐn)U展一個類并繼承它的行為,在構(gòu)造函數(shù)中,也可以使用super關(guān)鍵字引用父類的構(gòu)造函數(shù)。
JavaScript面向?qū)ο缶幊淌腔谠蛯崿F(xiàn)的
class itBook extends Book {
costructor(title, pages, isbn, technology) {
super(title, pages, isbn);
this.technology = technology;
}
printTechnology() {
console.log(this.technology);
}
}
let daBook = new itBook('魔王哪吒算法', '222', '1333', 'JavaScript');
使用屬性存取器
是一個聲明了get和set函數(shù)的類:
class Person {
constructor (name) {
this._name = name;
}
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
}
let dada = new Person('jeskson');
ddada.name = '魔王哪吒';
26. 刪除排序數(shù)組中的重復(fù)項
一、題目描述
給定一個排序數(shù)組,你需要在 原地 刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。
示例 1:
給定數(shù)組 nums = [1,1,2],
函數(shù)應(yīng)該返回新的長度 2, 并且原數(shù)組 nums 的前兩個元素被修改為 1, 2。
你不需要考慮數(shù)組中超出新長度后面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函數(shù)應(yīng)該返回新的長度 5, 并且原數(shù)組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。
你不需要考慮數(shù)組中超出新長度后面的元素。
說明:
為什么返回數(shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請注意,輸入數(shù)組是以「引用」方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
你可以想象內(nèi)部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);
// 在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
// 根據(jù)你的函數(shù)返回的長度, 它會打印出數(shù)組中該長度范圍內(nèi)的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
二、思路分析
使用快慢指針來記錄遍歷的坐標(biāo),如果兩個指針指的數(shù)字相同,則快指針向前走一步,如果不同,則兩個指針都向前走一步,當(dāng)快指針走完整個數(shù)組后,慢指針當(dāng)前的坐標(biāo)加1,就是數(shù)組中不同數(shù)字的個數(shù)。
實際上這就是雙指針中的快慢指針。在這里快指針是讀指針, 慢指針是寫指針。









三、答案代碼
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function (nums) {
if (size == 0) return 0;
let slowP = 0;
for (let fastP = 0; fastP < nums.length; fastP++) {
if (nums[fastP] !== nums[slowP]) {
slowP++;
nums[slowP] = nums[fastP];
}
}
return slowP + 1;
};
總結(jié):
刪除排序數(shù)組中的重復(fù)項,合并兩個有序鏈表-題解!
回看筆者往期高贊文章,也許能收獲更多喔!
一個合格的初級前端工程師需要掌握的模塊筆記 Vue.js筆試題解決業(yè)務(wù)中常見問題 【初級】個人分享Vue前端開發(fā)教程筆記 長篇總結(jié)之JavaScript,鞏固前端基礎(chǔ) 前端面試必備ES6全方位總結(jié) 達(dá)達(dá)前端個人web分享92道JavaScript面試題附加回答 【圖文并茂,點贊收藏哦!】重學(xué)鞏固你的Vuejs知識體系 【思維導(dǎo)圖】前端開發(fā)-鞏固你的JavaScript知識體系 14期-連肝7個晚上,總結(jié)了計算機(jī)網(wǎng)絡(luò)的知識點!(共66條)
??關(guān)注+點贊+收藏+評論+轉(zhuǎn)發(fā)??,原創(chuàng)不易,鼓勵筆者創(chuàng)作更好的文章
點贊、收藏和評論
我是Jeskson(達(dá)達(dá)前端),感謝各位人才的:點贊、收藏和評論,我們下期見!(如本文內(nèi)容有地方講解有誤,歡迎指出?謝謝,一起學(xué)習(xí)了)
我們下期見!
文章持續(xù)更新,可以微信搜一搜「 程序員哆啦A夢 」第一時間閱讀,回復(fù)【資料】有我準(zhǔn)備的一線大廠資料,本文 http://www.dadaqianduan.cn/#/ 已經(jīng)收錄
github收錄,歡迎Star:https://github.com/webVueBlog/WebFamily
