算法面试题四:两数之和,有效的数独,旋转图像

  • A+
所属分类:Web前端
摘要

这里介绍排序算法及贪心算法的个人解决方法如果对你有帮助,请你点个推荐,我会和你一起进步,加油(*^▽^*)。

这里介绍排序算法及贪心算法的个人解决方法

算法面试题四:两数之和,有效的数独,旋转图像

题目一:两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。  你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。  你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6 输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6 输出:[0,1]

提示:

2 <= nums.length <= 103 -109 <= nums[i] <= 109 -109 <= target <= 109 只会存在一个有效答案

答案:

/**  * @param {number[]} nums  * @param {number} target  * @return {number[]}  */ var twoSum = function(nums, target) {     let arr=[];     for(let i=0;i<nums.length-1;i++){         let bind = true;         let jj = 0;         for(let j=i+1;j<nums.length;j++){             if(nums[i]+nums[j] == target){                 bind = false;                 jj = j;             }         }         if(!bind){             arr.push(i)             arr.push(jj)             nums.splice(i,1);             nums.splice(jj,1);             i--;         }     }     return arr; };

题目二:有效的数独

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。  1.数字 1-9 在每一行只能出现一次。 2.数字 1-9 在每一列只能出现一次。 3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

算法面试题四:两数之和,有效的数独,旋转图像

上图是一个部分填充的有效的数独。  数独部分空格内已填入了数字,空白格用 '.' 表示。

示例 1:

输入: [   ["5","3",".",".","7",".",".",".","."],   ["6",".",".","1","9","5",".",".","."],   [".","9","8",".",".",".",".","6","."],   ["8",".",".",".","6",".",".",".","3"],   ["4",".",".","8",".","3",".",".","1"],   ["7",".",".",".","2",".",".",".","6"],   [".","6",".",".",".",".","2","8","."],   [".",".",".","4","1","9",".",".","5"],   [".",".",".",".","8",".",".","7","9"] ] 输出: true

示例 2:

输入: [   ["8","3",".",".","7",".",".",".","."],   ["6",".",".","1","9","5",".",".","."],   [".","9","8",".",".",".",".","6","."],   ["8",".",".",".","6",".",".",".","3"],   ["4",".",".","8",".","3",".",".","1"],   ["7",".",".",".","2",".",".",".","6"],   [".","6",".",".",".",".","2","8","."],   [".",".",".","4","1","9",".",".","5"],   [".",".",".",".","8",".",".","7","9"] ] 输出: false

说明:

一个有效的数独(部分已被填充)不一定是可解的。 只需要根据以上规则,验证已经填入的数字是否有效即可。 给定数独序列只包含数字 1-9 和字符 '.' 。 给定数独永远是 9x9 形式的。

答案:

/**  * @param {character[][]} board  * @return {boolean}  */ var isValidSudoku = function(board) {     for (let arr of board) {                 let row = []     for (let c of arr) {       if (c !== '.') row.push(c);     }     let set = new Set(row)     if (set.size !== row.length) return false;   }    //   检查每一列   for (let i = 0; i < 9; i++) {     let col = []     board.map( arr => {       if (arr[i] !== '.') col.push(arr[i])     })     let set = new Set(col)     if (set.size !== col.length) return false;   }    //   检查每个小方块   for (let x = 0; x < 9; x += 3) {     for (let y = 0; y < 9; y += 3) {       let box = []       for (let a = x; a < 3 + x; a ++) {         for (let b = y; b < 3 + y; b ++) {           if (board[a][b] !== '.') box.push(board[a][b])         }       }       let set = new Set(box)       if (set.size !== box.length) return false     }   }      return true };

题目三:旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。  你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:

算法面试题四:两数之和,有效的数独,旋转图像

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

算法面试题四:两数之和,有效的数独,旋转图像

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] 输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

示例 3:

输入:matrix = [[1]] 输出:[[1]]

示例 4:

输入:matrix = [[1,2],[3,4]] 输出:[[3,1],[4,2]]

提示:

matrix.length == n matrix[i].length == n 1 <= n <= 20 -1000 <= matrix[i][j] <= 1000

答案:

/**  * @param {number[][]} matrix  * @return {void} Do not return anything, modify matrix in-place instead.  */ var rotate = function(matrix) {     let length = matrix.length;     for(let i=0;i<length/2;i++){         for (let j = i; j < length - 1 - i; j++) {             let tmp = matrix[i][j];             matrix[i][j] = matrix[length - 1 - j][i];             matrix[length - 1 - j][i] = matrix[length - 1 - i][length - 1 - j];             matrix[length - 1 - i][length - 1 - j] = matrix[j][length - 1 - i];             matrix[j][length - 1 - i] = tmp;         }     }     return matrix; };

如果对你有帮助,请你点个推荐,我会和你一起进步,加油(*^▽^*)。