LeetCode演算法簡單題--JavaScript(每天一道題)
這裡寫自定義目錄標題
練習中的所有題目均來自 力扣,至於實現方法就是小編自己寫的,僅供參考,請大家多多指教。
1.找出陣列中重複的數字。(2020-10-15)
題目描述:在一個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意一個重複的數字。
示例 1:
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
我的思路:利用雙重迴圈,第一層迴圈用來取出陣列中的每一個資料,第二重陣列用來取出陣列中除了第一重取出的資料意外的資料。然後將第一層迴圈取出的資料和第二層中的資料進行比較,一旦有重複的就立即輸出。這裡只輸出第一個重複的資料。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var nums = [3,5,6,7,11,8,9,3,6];
var flag = 0;
var findRepeatNumber = function(nums) {
for (var i = 0; i < nums.length; i++) {
for (var j = i + 1; j < nums.length; j++) {
if(nums[i] == nums[j]) {
console.log(nums[i]);
flag = 1;
}
}
if(flag == 1) {
break;
}
}
};
findRepeatNumber(nums);
</script>
</body>
</html>
2.二維陣列中的查詢(2020-10-16)
題目描述:在一個 n * m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
示例:
現有矩陣 matrix 如下:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
給定 target = 5,返回 true。
給定 target = 20,返回 false。
<script type="text/javascript">
var findNumberIn2DArray = function(matrix, target) {
var m = matrix.length;
if (m == 0) {
return false;
}
var flag = 0;
var i = 0;
var j = matrix[0].length - 1;
while( i < m && j >= 0 ) {
if (target < matrix[i][j] ) {
j--;
}
else if (target > matrix[i][j]) {
i++;
}
else if(target == matrix[i][j]) {
return true;
}
}
return false;
};
</script>
3.替換空格(2020-10-17)
題目描述:請實現一個函式,把字串 s 中的每個空格替換成"%20"。
示例 1:
輸入:s = “We are happy.”
輸出:“We%20are%20happy.”
我的思路:這個題目有比較多的實現方式。
方法一:先將傳入的字串按照空格切割(split方法),然後再使用%20來拼接(join)並返回值。
var replaceSpace = function(s) {
return s.split(' ').join('%20');
};
方法二:定義一個新陣列來接收替換後的結果,使用for迴圈遍歷字串,將判斷是否為空格,如果是就替換,如果不是就原樣放入陣列中,最後將陣列轉化為字串輸出。
var replaceSpace = function(s) {
var arr = [];
var len = 0;
for(var i = 0; i < s.length; i++) {
if (s[i] == " ") {
arr[len++] = '%';
arr[len++] = '2';
arr[len++] = '0';
} else {
arr[len++] = s[i];
}
}
return arr.join('');
};
方法三:利用正規表示式全域性找出空格並且替換
var replaceSpace = function(s) {
return s.replace(/ /g, "%20");
};
4.從頭到尾列印連結串列(2020-10-18)
題目描述:輸入一個連結串列的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。
注意:在這個題目中,主要注意的是連結串列的定義和初始化。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {number[]}
*/
function ListNode(val, next) {
this.val = val;
this.next = next;
}
var head = new ListNode(1, new ListNode(3, new ListNode(2)));
var reversePrint = function(head) {
// 定義一個當前節點指向頭結點,也就是我們傳入的引數其實知識一個頭結點
var current = head;
var result = [];
while (current != undefined) {
// 由於我們要輸出的是陣列的值,並不需要樹妖輸出 節點,所以我們在將資料存入資料的時候就只用將val壓棧
result.push(current.val);
current = current.next;//將當前的節點賦值為下一個節點
}
return result.reverse();
// 將陣列反轉後輸出
};
5.用兩個棧實現佇列(2020-10-19)
題目描述:用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式 appendTail 和 deleteHead ,分別完成在佇列尾部插入整數和在佇列頭部刪除整數的功能。(若佇列中沒有元素,deleteHead 操作返回 -1 )
思路:佇列和棧的順序正好相反的,棧是先進後出,但是佇列是先進先出,所以我們在模擬佇列的時候就使用兩個棧,第一個棧利用push方法存入資料,1,2,3,4,5,根據棧的特性,第二個棧將第一個棧中的資料pop存入,就成了5,4,3,2,1.最後我們在輸出第二個棧的資料時,資料就成為了1,2,3,4,5;也就是佇列的先進先出的特點了。
var CQueue = function() {
this.arr1 = [];
this.arr2 = [];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.arr1.push(value);
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if (this.arr2.length == 0) {
while(this.arr1.length != 0) {
this.arr2.push(this.arr1.pop());
}
}
return this.arr2.length == 0 ? -1:this.arr2.pop();
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/
相關文章
- 聊聊一道簡單的javascript面試題JavaScript面試題
- 每天一道程式設計題(Javascript)程式設計JavaScript
- 一道簡單的題
- 一道簡單的分配演算法題,求解演算法
- 每天一道演算法題:顛倒整數演算法
- 每天一道演算法題:Z字形轉換演算法
- iOS 每天一道面試題iOS面試題
- LeetCode簡單演算法題目-JS解法LeetCode演算法JS
- 每天一道演算法題:最長迴文子串演算法
- 簡單演算法題:leetcode-1 兩數之和演算法LeetCode
- 簡單演算法題:leetcode-2 兩數相加演算法LeetCode
- 【LeetCode】簡單題目集LeetCode
- JavaScript的一道加法題?JavaScript
- 一道演算法題演算法
- 一道簡單的題目引發的思考
- LeetCode #1:Two Sum(簡單題)LeetCode
- 每天一道演算法題:無重複字元的最長子串演算法字元
- 每天一道演算法題(將數拆分成斐波那契序列)演算法
- 每天一道演算法題系列十三之羅馬數字轉整數演算法
- 記Javascript一道題的理解JavaScript
- 一道前端演算法題前端演算法
- 15道簡單演算法題演算法
- The Center of Gravity(一道很很簡單的幾何題)
- 【20190326】【每天一道演算法題】求眾數(分治演算法)演算法
- 每天一道演算法題:求兩個排序陣列的中位數演算法排序陣列
- 每天一道LeetCode--141.Linked List Cycle(連結串列環問題)LeetCode
- 一道演算法題的分析演算法
- 十道簡單演算法題演算法
- 每天一道演算法題--排序之桶排序實現求排序後相鄰最大差值問題演算法排序
- 每天一道LeetCode--342. Power of FourLeetCode
- 分享一道有趣的 Leetcode 題目LeetCode
- 通過一道簡單的例題了解Linux核心PWNLinux
- 對一道if-else相關的程式題的簡單分析
- 「每日一道演算法題」Reverse Integer演算法
- 每日一道演算法題--leetcode 461--漢明距離--python演算法LeetCodePython
- 每天一道LeetCode--169.Majority ElemenLeetCode
- 每天一道LeetCode--326. Power of ThreeLeetCode
- 【leetcode 簡單】 第一百零六題 壓縮字串LeetCode字串