路飞_前端算法第二弹
2023-10-15 22:32:56
前言
继上次的五道排序题之后,今天又做了五道题,来记录一下我做题和思考的过程,下次再记录经过整理优化之后的方法。这次记录主要是记录我看到这几道题的第一反应,由于做题做的少,所以第一反应往往不是那么准确,熟能生巧。
题目一:斐波那契数列
给定一个整数 n ,求斐波那契数列的第 n 项。
斐波那契数列是一个特殊的数列,其中每个数字都是前两个数字的和。第一个和第二个数字都为 1,接下来的数字就由前面两个数字相加而得出。
我的第一反应是使用递归函数来解决这个问题。递归函数是一种函数,它会调用它自身来完成任务。在这种情况下,递归函数将调用它自身来计算斐波那契数列的第 n 项,然后返回该值。
function fibonacci(n) {
if (n === 0 || n === 1) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
题目二:字符串反转
给定一个字符串,将其反转。
我的第一反应是使用循环来解决这个问题。循环是一种控制结构,它可以重复执行一段代码,直到满足某个条件。在这种情况下,循环将重复执行一段代码,直到字符串被完全反转。
function reverseString(str) {
var reversedString = "";
for (var i = str.length - 1; i >= 0; i--) {
reversedString += str[i];
}
return reversedString;
}
题目三:二分查找
给定一个有序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不在数组中,则返回 -1。
我的第一反应是使用二分查找算法来解决这个问题。二分查找算法是一种高效的搜索算法,它将数组分成两半,然后递归地搜索每一半,直到找到目标值。
function binarySearch(arr, target) {
var low = 0;
var high = arr.length - 1;
while (low <= high) {
var mid = Math.floor((low + high) / 2);
var guess = arr[mid];
if (guess === target) {
return mid;
} else if (guess < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
题目四:冒泡排序
给定一个数组,对其元素进行冒泡排序。
我的第一反应是使用冒泡排序算法来解决这个问题。冒泡排序算法是一种简单的排序算法,它将数组中的元素逐个比较,并将较大的元素交换到数组的末尾。
function bubbleSort(arr) {
var swapped;
do {
swapped = false;
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
题目五:快速排序
给定一个数组,对其元素进行快速排序。
我的第一反应是使用快速排序算法来解决这个问题。快速排序算法是一种高效的排序算法,它将数组分成两部分,然后递归地对每一部分进行排序。
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
var pivot = arr[arr.length - 1];
var left = [];
var right = [];
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(pivot, quickSort(right));
}
结语
以上就是我做题和思考的过程,下次我会记录经过整理优化之后的方法。希望对大家有所帮助。