web复习(二)

发布于:2024-12-18 ⋅ 阅读:(100) ⋅ 点赞:(0)

编程题

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>