Skip to content

Commit 7c78e9a

Browse files
committed
add: 环形数组循环
1 parent c843609 commit 7c78e9a

16 files changed

+162
-151
lines changed

README.md

+109-109
Large diffs are not rendered by default.

src/array/01-matrix.js renamed to src/array/01-matrix.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
/**
2-
* @param {number[][]} matrix
3-
* @return {number[][]}
4-
*/
5-
export const updateMatrix = function (matrix) {
1+
export const updateMatrix = function (matrix: number[][]): number[][] {
62
if (matrix.length === 0) return []
73

84
const m = matrix.length
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
/**
2-
* @param {number[]} prices
3-
* @return {number}
4-
*/
5-
var maxProfit = function (prices) {
1+
export const maxProfit = function (prices: number[]): number {
62
let profit = 0
73
for (let n = 1; n < prices.length; n++) {
84
if (prices[n] > prices[n - 1]) profit += prices[n] - prices[n - 1]
@@ -11,4 +7,3 @@ var maxProfit = function (prices) {
117
return profit
128
}
139

14-
export default maxProfit

src/array/binary-search.js renamed to src/array/binary-search.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
/**
2-
* @param {number[]} nums
3-
* @param {number} target
4-
* @return {number}
5-
*/
6-
export const search = function (nums, target) {
1+
export const search = function (nums: number[], target: number): number {
72
if (!nums || nums.length === 0) return -1
83

94
let start = 0

src/array/bubble-sort.js renamed to src/array/bubble-sort.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// 空间复杂度 O(1)
44
// 稳定
55

6-
export default (arr) => {
6+
export default (arr: number[]): number[] => {
77
for (let n = 0, len = arr.length - 1, down = true; n < len; n++) {
88
for (let i = 0, iLen = len - n; i < iLen; i++) {
99
if (arr[i + 1] < arr[i]) {

src/array/can-place-flowers.js renamed to src/array/can-place-flowers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default (flowerbed, n) => {
1+
export default (flowerbed: number[], n: number): boolean => {
22
let max = 0
33

44
// 前后各加一个0,避免判断边界情况。

src/array/circular-array-loop.js

-6
This file was deleted.

src/array/circular-array-loop.ts

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// LeetCode 457. 环形数组循环 https://leetcode-cn.com/problems/circular-array-loop/
2+
// LintCode 1229. 循环数组中的环 https://www.lintcode.com/problem/circular-array-loop/description
3+
4+
const getNextIndex = (nums: number[], len: number, cur: number) => {
5+
return ((cur + nums[cur]) % len + len) % len
6+
}
7+
8+
export function circularArrayLoop (nums: number[]): boolean {
9+
for (let i = 0, len = nums.length; i < len; i++) {
10+
if (nums[i] === 0) continue
11+
let slow = i, fast = getNextIndex(nums, len, i)
12+
while (nums[slow] * nums[fast] > 0 && nums[slow] * nums[getNextIndex(nums, len, fast)] > 0) { // 方向相同
13+
if (slow === fast) {
14+
if (slow !== getNextIndex(nums, len, slow)) {
15+
return true
16+
} else {
17+
break
18+
}
19+
}
20+
slow = getNextIndex(nums, len, slow)
21+
fast = getNextIndex(nums, len, getNextIndex(nums, len, fast))
22+
}
23+
let add = i
24+
while (nums[add] * nums[getNextIndex(nums, len, add)] > 0) {
25+
const tmp = add
26+
add = getNextIndex(nums, len, add)
27+
nums[tmp] = 0
28+
}
29+
}
30+
return false
31+
}
File renamed without changes.

test/array/best-time-to-buy-and-sell-stock-ii.test.js

-9
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { maxProfit } from '../../src/array/best-time-to-buy-and-sell-stock-ii'
2+
3+
test('maxProfit', () => {
4+
expect(maxProfit([7, 1, 5, 3, 6, 4])).toBe(7)
5+
expect(maxProfit([1, 2, 3, 4, 5])).toBe(4)
6+
expect(maxProfit([7, 6, 4, 3, 1])).toBe(0)
7+
expect(maxProfit([])).toBe(0)
8+
expect(maxProfit([2, 1, 2, 0, 1])).toBe(2)
9+
})
File renamed without changes.
File renamed without changes.

test/array/can-place-flowers.test.js

-7
This file was deleted.

test/array/can-place-flowers.test.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import canPlaceFlowers from '../../src/array/can-place-flowers'
2+
3+
test('canPlaceFlowers', () => {
4+
expect(canPlaceFlowers([1, 0, 0, 0, 1], 1)).toBeTruthy()
5+
expect(canPlaceFlowers([1, 0, 0, 0, 1], 2)).toBeFalsy()
6+
expect(canPlaceFlowers([1, 0, 0, 0, 1, 0, 0], 2)).toBeTruthy()
7+
})

test/array/circular-array-loop.js renamed to test/array/circular-array-loop.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import circularArrayLoop from '../../src/array/circular-array-loop'
1+
import { circularArrayLoop } from '../../src/array/circular-array-loop'
22

33
test('circularArrayLoop', () => {
44
expect(circularArrayLoop([2, -1, 1, 2, 2])).toEqual(true)

0 commit comments

Comments
 (0)