每天一道算法题

题目:

[1,5,6,7,2,1,4,11,44,22,3] 对数组中的元素重新组合 组合的结果需要是最大值的组合.结果:7654443222111

分析:

第一眼就看到,那我是不是可以使用冒泡
	$array = [1,5,6,7,2,1,4,11,44,22,3];
	$len = count($array);
	for ($i = 0; $i < $len; $i++) {
		for ($j = $i + 1; $j < $len; $j++) {
			if ($new[$i] < $new[$j]) {
				$temp = $new[$i];
				$new[$i] = $new[$j];
				$new[$j] = $temp;
			}
		}
	}	
	$str = implode("", $new);

后面发现不对,7得在前面才会让数字变得更大,所以我们得换一种方法

我们改变一下思路

我们先计算出数组里面最长的数字的长度是多少,然后在一个新的数组上面以原数组的值作为新数组的key,值以原数组的值最后一个值补齐长度

最后再对新的数组进行降序排序arsort

数组|0|1|2|3|4

-|-|-|-|-|-|

a|1|5|6|7|44

b|11|55|66|77|44

代码:

	
	$array = [1,5,6,7,2,1,4,11,44,22,3];
	$data = [];
	$result = "";
	$maxLength = 0;
	foreach ($array as $key => $value) {
		if (strlen($value) > $maxLength) $maxLength = strlen($value);
	}
	foreach ($array as $key => $value) {
		$data[$value] = $value;
		$len = strlen($value);
		$str = substr($value, -1);
		for ($i = 0; $i < $maxLength - $len; $i++) { 
			$data[$value] .= $str;
		}
	}
	arsort($data);
	foreach ($data as $key => $value) {
		$result .= $key;
	}
	pritn_r($result);
标签:
作者:华传财
舞台上有你,就演好角色; 舞台上没你,就静静地做观众;

已有 0 位网友参与,快来吐槽:

发表评论