Skip to content

Commit 66f8281

Browse files
committed
219,278,283,290,299
1 parent e76154f commit 66f8281

File tree

5 files changed

+280
-0
lines changed

5 files changed

+280
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: linyz
5+
* Date: 2020/6/6
6+
* Time: 17:16
7+
*/
8+
9+
class L219_ContainsDuplicateII
10+
{
11+
/**
12+
* @param Integer[] $nums
13+
* @param Integer $k
14+
* @return Boolean
15+
*/
16+
function containsNearbyDuplicate($nums, $k) {
17+
18+
$tArr = array();
19+
foreach($nums as $i => $v){
20+
$existKey = array_search($v,$tArr);
21+
if($existKey !== false){
22+
if(($i - $existKey) <= $k){
23+
return true;
24+
}else{
25+
unset($tArr[$existKey]);
26+
$tArr[$i] = $v;
27+
}
28+
}
29+
$tArr[$i] = $v;
30+
}
31+
return false;
32+
}
33+
}
34+
35+
$nums = [1,2,3,1,2,3];
36+
$k = 2;
37+
38+
$m = new L219_ContainsDuplicateII();
39+
var_dump($m->containsNearbyDuplicate($nums,$k));

scripts/L278_FirstBadVersion.php

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
/**
3+
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
4+
5+
假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
6+
7+
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
8+
9+
示例:
10+
11+
给定 n = 5,并且 version = 4 是第一个错误的版本。
12+
13+
调用 isBadVersion(3) -> false
14+
调用 isBadVersion(5) -> true
15+
调用 isBadVersion(4) -> true
16+
17+
所以,4 是第一个错误的版本。 
18+
19+
来源:力扣(LeetCode)
20+
链接:https://leetcode-cn.com/problems/first-bad-version
21+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
22+
*/
23+
24+
/* The isBadVersion API is defined in the parent class VersionControl.
25+
public function isBadVersion($version){} */
26+
27+
class VersionControl{
28+
29+
private $x;
30+
31+
public function __construct($n){
32+
$this->x = mt_rand(1,$n);
33+
$this->x = 1;
34+
echo "badVersion:{$this->x}\n";
35+
}
36+
37+
public function isBadVersion($n){
38+
if($n >= $this->x){
39+
return true;
40+
}
41+
return false;
42+
}
43+
}
44+
45+
class L278_FirstBadVersion extends VersionControl
46+
{
47+
/**
48+
* @param Integer $n
49+
* @return Integer
50+
*/
51+
function firstBadVersion($n) {
52+
$x = ceil($n/2);
53+
$lastX = $n;
54+
$i = 0;
55+
while(true) {
56+
$sRange = abs($lastX - $x);
57+
$isBad = $this->isBadVersion($x);
58+
if($isBad){
59+
if($x == 1){
60+
return $x;
61+
}
62+
63+
if(abs($lastX - $x) == 1 && $i > 1){
64+
return $x;
65+
}
66+
$lastX = $x;
67+
$x = $x - ceil($sRange/2);
68+
}else{
69+
if($x == $n){
70+
return null;
71+
}
72+
73+
if(abs($lastX - $x) == 1){
74+
return $x + 1;
75+
}
76+
77+
$lastX = $x;
78+
$x = $x + ceil($sRange/2);
79+
}
80+
$i ++;
81+
}
82+
}
83+
84+
85+
}
86+
87+
$n = 3;
88+
$m = new L278_FirstBadVersion($n);
89+
echo $m->firstBadVersion($n);

scripts/L283_MoveZeros.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
4+
5+
示例:
6+
7+
输入: [0,1,0,3,12]
8+
输出: [1,3,12,0,0]
9+
说明:
10+
11+
必须在原数组上操作,不能拷贝额外的数组。
12+
尽量减少操作次数。
13+
14+
来源:力扣(LeetCode)
15+
链接:https://leetcode-cn.com/problems/move-zeroes
16+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
17+
*/
18+
19+
class L283_MoveZeros
20+
{
21+
/**
22+
* @param Integer[] $nums
23+
* @return NULL
24+
*/
25+
function moveZeroes(&$nums) {
26+
foreach($nums as $k => $v){
27+
if($v == 0){
28+
unset($nums[$k]);
29+
$nums[] = 0;
30+
}
31+
}
32+
}
33+
}
34+
$nums = [0,1,0,3,12];
35+
$m = new L283_MoveZeros();
36+
$m->moveZeroes($nums);
37+
print_r($nums);

scripts/L290_WordPattern.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: linyz
5+
* Date: 2020/6/7
6+
* Time: 15:41
7+
*/
8+
9+
class L290_WordPattern
10+
{
11+
/**
12+
* @param String $pattern
13+
* @param String $str
14+
* @return Boolean
15+
*/
16+
function wordPattern($pattern, $str) {
17+
$strArr = explode(' ',$str);
18+
$patternArr = str_split($pattern);
19+
if(count($strArr) != count($patternArr) || empty($pattern) || empty($str)){
20+
return false;
21+
}
22+
$patternMap = array();
23+
$strMap = array();
24+
25+
foreach($patternArr as $k => $v){
26+
27+
if(isset($patternMap[$v]) && $patternMap[$v] != $strArr[$k]){
28+
return false;
29+
}
30+
31+
if(isset($strMap[$strArr[$k]]) && $strMap[$strArr[$k]] != $v){
32+
return false;
33+
}
34+
35+
$patternMap[$v] = $strArr[$k];
36+
$strMap[$strArr[$k]] = $v;
37+
}
38+
return true;
39+
}
40+
}
41+
42+
$pattern = "abba";
43+
$str = "dog cat cat dog";
44+
45+
$m = new L290_wordPattern();
46+
var_dump($m->wordPattern($pattern,$str));

scripts/L299_BullsAndCows.php

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
/**
3+
你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。
4+
5+
请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。
6+
7+
请注意秘密数字和朋友的猜测数都可能含有重复数字。
8+
9+
示例 1:
10+
11+
输入: secret = "1807", guess = "7810"
12+
13+
输出: "1A3B"
14+
15+
解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。
16+
示例 2:
17+
18+
输入: secret = "1123", guess = "0111"
19+
20+
输出: "1A1B"
21+
22+
解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。
23+
说明: 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等。
24+
25+
来源:力扣(LeetCode)
26+
链接:https://leetcode-cn.com/problems/bulls-and-cows
27+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
28+
*/
29+
30+
class L299_BullsAndCows
31+
{
32+
/**
33+
* @param String $secret
34+
* @param String $guess
35+
* @return String
36+
*/
37+
function getHint($secret, $guess) {
38+
$secretArr = str_split($secret);
39+
$guessArr = str_split($guess);
40+
41+
$aCount = 0;
42+
$bCount = 0;
43+
foreach($secretArr as $k => $v){
44+
45+
if($guessArr[$k] == $secretArr[$k]){
46+
$aCount ++;
47+
unset($guessArr[$k]);
48+
unset($secretArr[$k]);
49+
}
50+
}
51+
52+
foreach($secretArr as $k1 => $v1){
53+
$k2 = array_search($secretArr[$k1],$guessArr);
54+
if($k2 !== false){
55+
$bCount ++;
56+
unset($secretArr[$k1]);
57+
unset($guessArr[$k2]);
58+
}
59+
}
60+
61+
return "{$aCount}A{$bCount}B";
62+
}
63+
}
64+
65+
66+
$secret = "1123";
67+
$guess = "0111";
68+
$m = new L299_BullsAndCows();
69+
print_r($m->getHint($secret,$guess));

0 commit comments

Comments
 (0)