Skip to content

Commit 812db14

Browse files
committed
53,58,66,67
1 parent b3baaba commit 812db14

File tree

4 files changed

+242
-0
lines changed

4 files changed

+242
-0
lines changed

L53_MaximumSubarray.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
/**
3+
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
4+
5+
示例:
6+
7+
输入: [-2,1,-3,4,-1,2,1,-5,4],
8+
输出: 6
9+
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
10+
进阶:
11+
12+
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解
13+
14+
来源:力扣(LeetCode)
15+
链接:https://leetcode-cn.com/problems/maximum-subarray
16+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
17+
*/
18+
19+
class L53_MaximumSubarray
20+
{
21+
/**
22+
* @param Integer[] $nums
23+
* @return Integer
24+
*/
25+
//暴力解法
26+
function maxSubArray($nums) {
27+
$maxSum = 0;
28+
$count = count($nums);
29+
for($i = 0;$i < $count;$i ++){
30+
$tempMaxSum = $nums[$i];
31+
if($i == 0){
32+
$maxSum = $nums[$i];
33+
}
34+
35+
if($maxSum < $nums[$i]){
36+
$maxSum = $nums[$i];
37+
$tempMaxSum = $nums[$i];
38+
}
39+
40+
for($j = $i + 1;$j < $count;$j ++){
41+
$tempMaxSum += $nums[$j];
42+
if($tempMaxSum > $maxSum){
43+
$maxSum = $tempMaxSum;
44+
}
45+
}
46+
}
47+
return $maxSum;
48+
}
49+
50+
function maxSubArray2(){
51+
52+
}
53+
}
54+
55+
$nums = [1,2];
56+
$m = new L53_MaximumSubarray();
57+
print_r($m->maxSubArray($nums));

L58_LengthOfLastWord.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
/**
3+
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。
4+
5+
如果不存在最后一个单词,请返回 0 。
6+
7+
说明:一个单词是指由字母组成,但不包含任何空格的字符串。
8+
9+
示例:
10+
11+
输入: "Hello World"
12+
输出: 5
13+
14+
来源:力扣(LeetCode)
15+
链接:https://leetcode-cn.com/problems/length-of-last-word
16+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
17+
*/
18+
19+
class L58_LengthOfLastWord
20+
{
21+
function lengthOfLastWord($s) {
22+
if($s == ' '){
23+
return 0;
24+
}
25+
26+
$index = strrpos($s,' ');
27+
$endIndex = strlen($s) - 1;
28+
29+
if($index === false){
30+
return ($endIndex + 1);
31+
}
32+
33+
//空格在最后
34+
if($endIndex == $index){
35+
return $this->lengthOfLastWord(rtrim($s));exit();
36+
}
37+
38+
$i = $endIndex - $index;
39+
return $i < 0 ? 0 : $i;
40+
}
41+
}
42+
43+
$s = 'a ';
44+
$m = new L58_LengthOfLastWord();
45+
echo $m->lengthOfLastWord($s);
46+
47+

L66_PlusOne.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
/**
3+
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
4+
5+
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
6+
7+
你可以假设除了整数 0 之外,这个整数不会以零开头。
8+
9+
示例 1:
10+
11+
输入: [1,2,3]
12+
输出: [1,2,4]
13+
解释: 输入数组表示数字 123。
14+
示例 2:
15+
16+
输入: [4,3,2,1]
17+
输出: [4,3,2,2]
18+
解释: 输入数组表示数字 4321。
19+
20+
来源:力扣(LeetCode)
21+
链接:https://leetcode-cn.com/problems/plus-one
22+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
23+
*/
24+
25+
class L66_PlusOne
26+
{
27+
function plusOne($digits) {
28+
if(empty($digits) || !is_array($digits)){
29+
return 0;
30+
}
31+
32+
$count = count($digits);
33+
for($i = $count - 1;$i >= 0;$i --){
34+
if($digits[$i] == 9){
35+
$digits[$i] = 0;
36+
if($i == 0){
37+
array_unshift($digits,1);
38+
}
39+
}else{
40+
$digits[$i] += 1;
41+
break;
42+
}
43+
}
44+
return $digits;
45+
}
46+
}
47+
48+
$digits = [9];
49+
$m = new L66_PlusOne();
50+
print_r($m->plusOne($digits));

L67_AddBinary.php

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?php
2+
/**
3+
给定两个二进制字符串,返回他们的和(用二进制表示)。
4+
5+
输入为非空字符串且只包含数字 1 和 0。
6+
7+
示例 1:
8+
9+
输入: a = "11", b = "1"
10+
输出: "100"
11+
示例 2:
12+
13+
输入: a = "1010", b = "1011"
14+
输出: "10101"
15+
16+
来源:力扣(LeetCode)
17+
链接:https://leetcode-cn.com/problems/add-binary
18+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
19+
*/
20+
21+
class L67_AddBinary
22+
{
23+
function addBinary($a, $b) {
24+
$aLastIndex = strlen($a) - 1;
25+
$bLastIndex = strlen($b) - 1;
26+
27+
if($aLastIndex > $bLastIndex){
28+
$b = str_pad($b,$aLastIndex + 1,'0',STR_PAD_LEFT);
29+
}
30+
31+
if($aLastIndex < $bLastIndex){
32+
$a = str_pad($a,$bLastIndex + 1,'0',STR_PAD_LEFT);
33+
}
34+
35+
$aArray = str_split($a);
36+
$bArray = str_split($b);
37+
38+
$resultStr = '';
39+
$carry = 0;
40+
41+
$loop = $aLastIndex > $bLastIndex ? $aLastIndex : $bLastIndex;
42+
43+
for($i = $loop;$i >= 0;$i --){
44+
if($carry){
45+
if(($aArray[$i] + $bArray[$i] + 1) == 3){
46+
if($i == 0){
47+
$resultStr = '11'.$resultStr;
48+
}else{
49+
$resultStr = '1'.$resultStr;
50+
$carry = 2;
51+
continue;
52+
}
53+
}elseif(($aArray[$i] + $bArray[$i] + 1) == 2){
54+
if($i == 0){
55+
$resultStr = '10'.$resultStr;
56+
}else{
57+
$resultStr = '0'.$resultStr;
58+
$carry = 1;
59+
continue;
60+
}
61+
62+
}else{
63+
$resultStr = (string)($aArray[$i] + $bArray[$i] + 1).$resultStr;
64+
}
65+
$carry = 0;
66+
}else{
67+
if(($aArray[$i] + $bArray[$i]) == 2){
68+
if($i == 0){
69+
$resultStr = '10'.$resultStr;
70+
}else{
71+
$resultStr = '0'.$resultStr;
72+
$carry = 1;
73+
}
74+
}else{
75+
$resultStr = (string)($aArray[$i] + $bArray[$i]).$resultStr;
76+
}
77+
}
78+
}
79+
return $resultStr;
80+
}
81+
}
82+
83+
$a = '101';
84+
$b = '111';
85+
$m = new L67_AddBinary();
86+
echo $m->addBinary($a,$b);
87+
88+

0 commit comments

Comments
 (0)