LeetCode演算法簡單題--JavaScript(每天一道題)

前端小白菜.發表於2020-10-19


練習中的所有題目均來自 力扣,至於實現方法就是小編自己寫的,僅供參考,請大家多多指教。

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()
 */

相關文章