编程题
1.编写一个函数,接收一个数组作为参数,返回一个对象,其中包含数组中每个元素及其出现次数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function elementFrequency(arr) {
const freq = {};
for (let elem of arr) {
freq[elem] = (freq[elem] || 0) + 1;
}
return freq;
}
console.log(elementFrequency([1,2,3,2,3]));
</script>
</body>
</html>
2.编写一个函数来查找并返回一个数组中的最大值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//编写一个函数来查找并返回一个数组中的最大值
function FindMax(arr) {
//数组为空
if(arr.length === 0) {
return null;
}
//数组不为空
let max = arr[0];
for(let i = 1; i < arr.length; i++) {
if(arr[i] > max) {
max = arr[i];
}
}
return max;
}
const Arr = [4,7,2,9,3];
console.log(FindMax(Arr));
</script>
</body>
</html>
3.编写一个函数,该函数能够找出数组中出现次数最多的元素,并返回该元素。如果有多个元素出现次数最多,返回其中的任意一个。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//编写一个函数,该函数能够找出数组中出现次数最多的元素,并返回该元素。如果有多个元素出现次数最多,返回其中的任意一个。
function FindMaxCount(arr) {
let freqMap = new Map(); //用于存储每个元素及其出现的频率
let maxFreq = 0; //记录当前出现的最大频率
let mostFreqElement; //用于存储出现次数最多的元素
arr.forEach(element => {
let freq = freqMap.get(element) || 0; //获取当前元素
freqMap.set(element,freq + 1); //更新该元素的频率
//如果当前元素的频率大于 maxFreq,更新 maxFreq 和 mostFreqElement
if(freq + 1 > maxFreq) {
maxFreq = freq + 1;
mostFreqElement = element;
}
});
return mostFreqElement; // 返回出现次数最多的元素
}
const Number = [1,3,5,2,3,6,7,3];
console.log(FindMaxCount(Number));
</script>
</body>
</html>
4.编写一个函数,该函数能够找出数组中的所有非重复元素,并返回一个新数组。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function nonRepeatingElements(arr) {
let freqMap = new Map(); //存储每个元素出现的频率
let nonRepeatingArr = []; //存储最终的不重复元素
arr.forEach(element => { //遍历数组
let freq = freqMap.get(element) || 0; //取该元素当前的频率,如果该元素不存在则返回 0(通过 || 0 处理)
freqMap.set(element,freq + 1); //该元素的频率增加 1,并更新到 freqMap 中
});
arr.forEach(element => { //遍历数组
if(freqMap.get(element) === 1) { //如果某个元素在 freqMap 中的频率为 1,说明该元素不重复
nonRepeatingArr.push(element); //添加到 nonRepeatingArr 数组
}
});
return nonRepeatingArr; //返回包含所有不重复元素的数组 nonRepeatingArr
}
console.log(nonRepeatingElements([1,2,3,2,4,3]));
</script>
</body>
</html>
5.给定一个二叉树和一个值,判断该值是否存在于二叉树中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//给定一个二叉树和一个值,判断该值是否存在于二叉树中
class Node { //定义Node类用于表示二叉树的节点
constructor(val) {
this.val = val; //节点的值
this.left = null; //左子节点初始化为空
this.right = null; //右子节点初始化为空
}
}
function findValue(root,value) {
if(root === null) {
return false;
}
if(root.val === value) {
return true;
}
return findValue(root.left,value) || findValue(root.right,value);
}
const root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
console.log(findValue(root,5));
</script>
</body>
</html>