对称数组(回文数)

判断一个数组是不是对称数组

//判断数组是否为对称数组,对称数组形式如:[a, b, c, b, a]、[a, b, c, c, b, a]

回文数 var str="123321" > var str1=str.split('').join('');(转为数组)

//判断数组是否为对称数组,对称数组形式如:[a, b, c, b, a]、[a, b, c, c, b, a]
			var arr2 = ['a', 'b', 'c', 'c', 'b', 'a'];
			var arr3 = "abccba";
			//方法一:用一个数组存反的数据,然后直接比较
			function symmetry(arr) {
				//....
				var newArr = [];//存反取的数据
				for (var i = arr.length - 1; i >= 0; i--) {
					newArr.push(arr[i]);
				}
				// 原数组与反数据对比
				for (var i = 0; i < newArr.length; i++) {
					if (newArr[i] != arr[i]) {
						return false;
				// 如果不一样返回false
					}
				}
				return true;
			}
			//方法二:用一个变量存数组尾部,一个存开头,遍历数组
			function symmetry(arr) {
				var start = 0;
				var end = arr.length - 1;
				for (var i = 0; i < arr.length; i++) {
					// 判断对称位置上是否相等
					if (arr[start] != arr[end]) {
						return false;
					}
					start++;//开始+1
					end--;//结尾-1
				}
			
				return true;
			}
			//方法三:直接遍历
			function symmetry(arr) {
				for (var i = 0; i < arr.length; i++) {
					if (arr[1] != arr[arr.length - 1 - i]) {
						return false;
					}
				}
				return true;
			}
			// 前三个类似,算法时间复杂度高
			
			//方法四:只需遍历数组一半
			function symmetry(arr) {
				for (var i = 0; i < arr.length; i++) {
					// 如果开始大于或者等于结尾直接结束循环,时间复杂度减半
					if (i>= arr.length - 1 - i) {
						break;
					}
					if (arr[i] != arr[arr.length - 1 - i]) {
						return false;
					}
				}
			
				return true;
			}
			//方法五:与方法四类似
			function symmetry(arr) {
                start=0;
                var end = arr.length - 1;
				while (start < end) {
					if (arr[start] != arr[end]) {
						return false;
					}
					start++;
					end--;
				}
				return true;
			}
			console.log(symmetry(arr2), symmetry(arr3.split('').join('')));	//true true

猜你喜欢

转载自blog.csdn.net/qq_45044074/article/details/113146788