如果您对PHP实现合并两个有序数组的方法分析和php实现合并两个有序数组的方法分析数据结构感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解PHP实现合并两个有序数组的方法分析的各种细节,并对ph
如果您对PHP实现合并两个有序数组的方法分析和php实现合并两个有序数组的方法分析数据结构感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解PHP实现合并两个有序数组的方法分析的各种细节,并对php实现合并两个有序数组的方法分析数据结构进行深入的分析,此外还有关于C算法--合并两个有序数组、java 合并两个有序数组、java 如何用一个循环实现两个有序数组合并成一个有序数组、JavaScript 合并两个有序数组, 在有序数组中查找目标元素索引的实用技巧。
本文目录一览:- PHP实现合并两个有序数组的方法分析(php实现合并两个有序数组的方法分析数据结构)
- C算法--合并两个有序数组
- java 合并两个有序数组
- java 如何用一个循环实现两个有序数组合并成一个有序数组
- JavaScript 合并两个有序数组, 在有序数组中查找目标元素索引
PHP实现合并两个有序数组的方法分析(php实现合并两个有序数组的方法分析数据结构)
本文实例讲述了PHP实现合并两个有序数组的方法。分享给大家供大家参考,具体如下:
$arr1 = array(1,2,3,4,5,6,7,8); $arr2 = array(3,4,5,7,9,10); //方法1 function mergeOrderly1($arr1,$arr2){ $i=0;$j=0; $int = array(); while($i<count($arr1) && $j<count($arr2)){ $int[] = $arr1[$i]<$arr2[$j]?$arr1[$i++]:$arr2[$j++]; } while($i<count($arr1)){ $int[] = $arr1[$i++]; } while($j<count($arr2)){ $int[] = $arr2[$j++]; } //$int = array_merge($int,array_slice($arr1,$i)); //$int = array_merge($int,array_slice($arr2,$j)); return $int; } //方法2 function mergeOrderly2($arr1,$arr2){ $arr = array();//定义最终数组容器 $arr2Num = count($arr2);//统计数组长度 $arr1Num = count($arr1); $i1 = 0;//数组1 的循环标记 $i2 = 0;//数组2 的循环标记 while($i1 < $arr1Num || $i2 < $arr2Num){//是否还需要合并 if($i1 < $arr1Num && $i2 < $arr2Num){//当两个数组都没有到达末尾,情况一 if($arr1[$i1] > $arr2[$i2]){//需要比较数组1和数组2,小的放入目标数组,并且标记+1 $arr[] = $arr2[$i2]; $i2++; }else{ $arr[] = $arr1[$i1]; $i1++; } }elseif($i1 < $arr1Num && $i2 >= $arr2Num){//数组2 已经到达末尾,而数组1还为到达,情况二 $arr[] = $arr1[$i1];//直接把数组1的内容插入到目标数组中 $i1++; }elseif($i2 < $arr2Num && $i1 >= $arr1Num){//数组1已经到达末尾,而数组2还未到达,情况三 $arr[] = $arr2[$i2];//直接把数组2的内容插入到目标数组中 $i2++; } } return $arr; } print_r(mergeOrderly1($arr1,$arr2)); print_r(mergeOrderly2($arr1,$arr2));
运行结果:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 3 [4] => 4 [5] => 4 [6] => 5 [7] => 5 [8] => 6 [9] => 7 [10] => 7 [11] => 8 [12] => 9 [13] => 10 ) Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 3 [4] => 4 [5] => 4 [6] => 5 [7] => 5 [8] => 6 [9] => 7 [10] => 7 [11] => 8 [12] => 9 [13] => 10 )
细心的读者应该发现了,合并后的数组并没有去重复。下面介绍一下数组合并后去重复的方法:
1. 单数组去重复
array_unique($arrTest)
2. 多数组去重复
array_keys(array_flip($arr1)+array_flip($arr2))
测试示例:
$arr1 = array(1,2,3,4,5); $arr2 = array(1,2,3,6,7); $arr3 = array(''0''=>1,''1''=>2,''2''=>3,''3''=>4,''4''=>5); $arr4 = array(''0''=>1,''1''=>2,''2''=>3,''3''=>6,''4''=>7); $arr5 = array(''0''=>1,''a''=>2,''b''=>3,''c''=>4,''4''=>5); $arr6 = array(''0''=>1,''a''=>2,''c''=>3,''d''=>6,''4''=>7); var_dump(array_merge($arr1, $arr2)); var_dump($arr1+$arr2); var_dump(array_keys(array_flip($arr1)+array_flip($arr2))); echo ''<br>''; var_dump(array_merge($arr3, $arr4)); var_dump($arr3+$arr4); var_dump(array_keys(array_flip($arr3)+array_flip($arr4))); echo ''<br>''; var_dump(array_merge($arr5, $arr6)); var_dump($arr5+$arr6);
运行结果:
array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(1) [6]=> int(2) [7]=> int(3) [8]=> int(6) [9]=> int(7) } array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } array(7) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) } array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(1) [6]=> int(2) [7]=> int(3) [8]=> int(6) [9]=> int(7) } array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } array(7) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) } array(8) { [0]=> int(1) ["a"]=> int(2) ["b"]=> int(3) ["c"]=> int(3) [1]=> int(5) [2]=> int(1) ["d"]=> int(6) [3]=> int(7) } array(6) { [0]=> int(1) ["a"]=> int(2) ["b"]=> int(3) ["c"]=> int(4) [4]=> int(5) ["d"]=> int(6) }
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《PHP数学运算技巧总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》及《php程序设计算法总结》
希望本文所述对大家PHP程序设计有所帮助。
- PHP实现统计一个数字在排序数组中出现次数的方法
- PHP实现找出有序数组中绝对值最小的数算法分析
- php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
- php实现按照权重随机排序数据的方法
- php实现有序数组旋转后寻找最小值方法
C算法--合并两个有序数组
第一:题目描述
1. 将两个整型且有序的数组,合并为一个新的数组。
2. 合并后的数组仍为有序数组。
3. 第一个数组有足够的空间来存放第二个数组。
4. 要求时间复杂度为O(M+N)
第二:思路
1. 用malloc函数开辟一个两个数组总长度的连续空间arr
2. 从第一个元素开始,依次比较两个数组中的每个元素。
3. 将较小值保存到新开辟的数组中
4. 并将较小值对应数组的当前索引向后移动一个元素,同时将开辟数组的索引也向后移动一个元素。
5. 这样只需要对每个数组遍历一遍即可,即时间复杂度为O(M+N),空间复杂度为O(M+N),即用空间换时间的策略。
第三:代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
// 如果第一个数组的长度为0,则直接将第二个数组拷贝到第一个数组中去
if (m == 0)
{
while (n--)
{
nums1[n] = nums2[n];
}
return;
}
// 动态开辟一个两个数组总元素个数 * int的内存空间
int* arr = (int*)malloc(sizeof(int) * (m + n));
if (NULL == arr)
{
printf("内存开辟失败\n");
return;
}
// i j k 分别为第一个、第二个、开辟动态数组的索引
int i = 0, j = 0, k = 0;
// 从第一个和第二个数组的第一个位置开始遍历
// 依次比较两个数组当前索引的两个值的大小,将较小值保存到第三个数组中。
// 将较小值对应的索引和第三个数组的索引向后移动一个元素。
// 直到第一和第二个数组中有一个超出输出索引范围。
while (i < m && j < n)
{
if (nums1[i] < nums2[j])
{
arr[k] = nums1[i];
i++;
}
else
{
arr[k] = nums2[j]www.;
j++;
}
k++;
}
// 第一个数组没有遍历完。
while (i < m)
{
arr[k] = nums1[i];
k++;
i++;
}
// 第二个数组没有遍历完。
while (j < n)
{
arr[k] = nums2[j];
k++;
j++;
}
// 将第三个数组的数据拷贝到第一个数组中
while (k--)
{
nums1[k] = arr[k];
}
// 释放动态开辟的内存空间
free(arr);
arr = NULL;
}
int main()
{
int i;
int arr1[1000] = { 1,4,6 };
int len1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = { 2,3,7 };
int len2 = sizeof(arr2) / sizeof(arr2[0]);
int m = 3;
// 测试第一个数组的元素有三个
//merge(arr1, len1, m, arr2, len2, len2);
//for (i = 0; i < m + len2; i++) { printf("%d ", arr1[i]); }
//printf("\n");
// 测试第一个数组的元素有两个
m = 2;
merge(arr1, len1, m, arr2, len2, len2);
for (i = 0; i < m+ len2; i++) { printf("%d ", arr1[i]); }
printf("\n");
}
java 合并两个有序数组
package base;
/**
* java 合并两个有序数组
*/
public class MergeTwoArray {
public static void main(String[] args) {
int[] arrayA = {100,200,201,334};
int[] arrayB = {101,104,106,233,455,772};
int[] arrayC = new int[arrayA.length + arrayB.length];
merge(arrayA,arrayA.length,arrayB,arrayB.length,arrayC);
disPlay(arrayC);
}
public static void merge(int[] arrayA, int sizeA, int[] arrayB, int sizeB,int[] arrryC) {
int aIndex = 0, bIndex = 0,cIndex = 0;
while (aIndex < sizeA && bIndex < sizeB) {
if(arrayA[aIndex] < arrayB[bIndex]) {
arrryC[cIndex ++] = arrayA[aIndex++];
} else {
arrryC[cIndex ++] = arrayB[bIndex++];
}
}
while (aIndex < sizeA) {
arrryC[cIndex ++] = arrayA[aIndex++];
}
while (bIndex < sizeB) {
arrryC[cIndex ++] = arrayB[bIndex ++];
}
}
public static void disPlay(int[] arryx) {
for(int i = 0; i < arryx.length; i ++) {
System.out.print(arryx[i] + " ");
}
System.out.println();
}
}
java 如何用一个循环实现两个有序数组合并成一个有序数组
如题,代码如下:
public void paixu() {
int[] a = { 1, 3, 5 };
int[] b = { 2, 3, 4, 7 };
int l = a.length + b.length;
int[] temp = new int[l];
int i = 0, j = 0, h = 0;
// 这里必须用while,不能用for
while (i < a.length || j < b.length) {
if (i == a.length && j < b.length) {
temp[h++] = b[j++];
} else if (i < a.length && j == b.length) {
temp[h++] = a[i++];
} else if (a[i] <= b[j]) {
temp[h++] = a[i++];
} else if (a[i] > b[j]) {
temp[h++] = b[j++];
}
}
for (int m : temp) {
System.out.print(m + " ");
}
}
JavaScript 合并两个有序数组, 在有序数组中查找目标元素索引
合并两个有序数组
function merge(nums1, nums2) {
var len1 = nums1.length - 1;
var len2 = nums2.length - 1;
var len = nums1.length + nums2.length - 1;
while (len1 >= 0 && len2 >= 0) {
nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
}
return nums1;
}
输入
[1, 2, 3] [2, 4, 5, 6, 7, 8, 9]
输出
[1, 2, 2, 3, 4, 5, 6, 7, 8, 9]
解析
- 获取数组1,数组2以及合并之后的数组的长度
从后遍历比较,当len1或len2为0的时候退出
序号 len1 len2 len nums1[len1] nums2[len2] nums 1 2 6 9 3 9 [1, 2, 3, empty*6, 9] 2 2 5 8 3 8 [1, 2, 3, empty*5, 8, 9] 3 2 4 7 3 7 [1, 2, 3, empty*4, 7, 8, 9] 4 2 3 6 3 6 [1, 2, 3, empty*3, 6, 7, 8, 9] 5 2 2 5 3 5 [1, 2, 3, empty*2, 5, 6, 7, 8, 9] 6 2 1 4 3 4 [1, 2, 3, empty*1, 4, 5, 6, 7, 8, 9] 7 1 1 3 3 2 [1, 2, 3, 3, 4, 5, 6, 7, 8, 9] 8 0 1 2 2 2 [1, 2, 2, 3, 4, 5, 6, 7, 8, 9]
在有序数组中查找目标元素索引
function search(arr, num) {
var start = 0, end = arr.length - 1;
while (start <= end) {
var mid = Math.floor((start + end) / 2);
if (num < arr[mid]) end = mid - 1;
else if (num > arr[mid]) start = mid + 1;
else return mid;
}
return -1;
}
取中间值,判断目标元素是在中间值的左边还是右边,对开始索引和结束索引进行更改
今天关于PHP实现合并两个有序数组的方法分析和php实现合并两个有序数组的方法分析数据结构的分享就到这里,希望大家有所收获,若想了解更多关于C算法--合并两个有序数组、java 合并两个有序数组、java 如何用一个循环实现两个有序数组合并成一个有序数组、JavaScript 合并两个有序数组, 在有序数组中查找目标元素索引等相关知识,可以在本站进行查询。
本文标签: