CodilityのLessonsを解く（更新中）


# 序文
_著者ロックヤン_

**アルゴリズムとデータ構造：**
ビジネスコードを作成するときは、より「正確さ」に注意を払い、アルゴリズムや複雑なデータ構造を使用しない場合があります。
ただし、データ量が多い、またはインターネットの同時実行性が高いシナリオでは、高いパフォーマンスも考慮する必要があります。これは、ビジネスを高速化するためだけでなく、システム障害とダウンタイムが処理速度とメモリ使用量に密接に関連している場合が多いためです。わずかなパフォーマンスのギャップでも、不可逆的なシステムアバランシェを引き起こす可能性があります。

**この記事について**
Codilityには、多くの優れたアルゴリズムの問​​題があります。作者は一つずつ挑戦し、コードとテストケースをみんなと共有したいと思っています。
* （src＆junit）とマークされた記事には、コードとテストケースが含まれています。
* マークされた記事（src＆junit＆author's note）には、コードとテストケース、および問題解決のアイデアやアプリケーションシナリオが含まれています。
* この記事はレッスンから始まり、将来的にチャレンジパートに含まれる予定です。
* 
**喜んで**
今日のアプリケーションシナリオでのさまざまなソリューションとその使用法についてお話ししたいと思います。メッセージを残してください。

Githubアドレス：https://github.com/yp2211/algorithm

> **前言**
> _作者 Roc Yang_
> **算法与数据结构：**
> 在编写业务代码时，我们关注更多的“正确性”，未必用得到算法和复杂的数据结构。
> 但在大数据量、或互联网高并发的场景下，我们还需要考虑高性能。这不仅仅是因为我们想让业务更快一点，更重要的是因为系统的故障、宕机在很多情况下都与处理速度、内存使用的多少息息相关。甚至是细微的性能差距，就会造成不可挽回的系统雪崩。
> **关于本文**
> Codility中，有很多好的算法题目。作者想逐一挑战，并把代码和测试用例分享给大家。
> * 标有（src & junit）的文章中，包含代码和测试用例；
> * 标有（src & junit & 著者注）的文章中，包含代码和测试用例，以及解题思路或应用场景；
> * 本文从Lesson开始，将来会纳入challenges的部分。
> **愿**
> 希望能够跟各位一起探讨各种解法、以及当今应用场景中的用途，欢迎留言。
> **Github地址**: [https://github.com/yp2211/algorithm](https://github.com/yp2211/algorithm)

---
# AVAILABLE LESSONS:

## Lesson 1: Iterations

### \[Painless\] [100%] [BinaryGap (src & junit)](https://qiita.com/yp2211/items/fab5224d1423548b3b30)   

---
## Lesson 2: Arrays

### \[Painless\] [100%] [CyclicRotation (src & junit)](https://qiita.com/yp2211/items/2ccf819a55e0157c4e31)
### \[Painless\] [100%] [OddOccurrencesInArray (src & junit)](https://qiita.com/yp2211/items/8a20d68bca573b83578f)

---
## Lesson 3: Time Complexity

### \[Painless\] [100%] [FrogJmp (src & junit)](https://qiita.com/yp2211/items/55eba9b957f2a7f71795)
### \[Painless\] [100%] [PermMissingElem (src & junit)](https://qiita.com/yp2211/items/35d4a853f98b13acc389)
### \[Painless\] [100%] [TapeEquilibrium (src & junit)](https://qiita.com/yp2211/items/df1eadeb6c6ad647d0e6)

---
## Lesson 4: Counting Elements

### \[Painless\] [100%] [FrogRiverOne (src & junit)](https://qiita.com/yp2211/items/682a3848dae03e5f53de)
### \[Respectable] [100%] [MaxCounters (src & junit & 著者注)](https://qiita.com/yp2211/items/95753cfe798379dc7557)
### \[Respectable\] [100%] [MissingInteger (src & junit & 著者注)](https://qiita.com/yp2211/items/5fe98ddba0d737539289)
### \[Painless\] [100%] [PermCheck (src & junit)](https://qiita.com/yp2211/items/db538d3fdf5ae2abaffc)

---
## Lesson 5: Prefix Sums

### \[Respectable\] [100%] [CountDiv (src & junit & 著者注)](https://qiita.com/yp2211/items/aa2cc349a00a2aa125ef)
### \[Respectable\] [100%] [GenomicRangeQuery (src & junit & 著者注)](https://qiita.com/yp2211/items/7a76744d8406f386e108)
### \[Respectable\] [100%] [MinAvgTwoSlice (src & junit)](https://qiita.com/yp2211/items/9fa7ec11d2b394d85660)
### \[Painless\] [100%] [PassingCars(src & junit)](https://qiita.com/yp2211/items/b7004b67099415791e05)

---
## Lesson 6: Sorting
### \[Painless\] [100%] [Distinct (src & jUnit & 著者注)](https://qiita.com/yp2211/items/9ed538f2eaf6c989e65f)
### \[Painless\] [100%] [MaxProductOfThree(src & jUnit)](https://qiita.com/yp2211/items/df4de0b3978baf65f496)
### \[Respectable\] [100%] [NumberOfDiscIntersections](https://qiita.com/yp2211/items/cbc5804a79f6faa97428)
### \[Painless\] [100%] [Triangle](https://qiita.com/yp2211/items/ee68b90191fbc62a9dfe)

---

## Lesson 7: Stacks and Queues
### \[Easy\] [100%] [Brackets](https://qiita.com/yp2211/items/f3d17900a58f0d0193c3)
### \[Easy\] [100%] [Fish](https://qiita.com/yp2211/items/e267f770d3d231920dcb)
### \[Easy\] [100%] [Nesting](https://qiita.com/yp2211/items/79e6725e5b8836df32a6)
### \[Easy\] [100%] [StoneWall](https://qiita.com/yp2211/items/60543783f8e9aaccc8fc)

---

## Lesson 8: Leader
### \[Easy\] [100%] [Dominator](https://qiita.com/yp2211/items/b8925603b2a5f98d564b)
### \[Easy\] [100%] [EquiLeader](https://qiita.com/yp2211/items/0bda6cca398496db2b0c)

## Lesson 9: Maximum slice problem
### \[Easy\] [100%] [MaxProfit](https://qiita.com/yp2211/items/4a9480aae41a7eb4a382)
### \[Easy\] [100%] [MaxSliceSum](https://qiita.com/yp2211/items/2c5dc3de91dedce0ffad)
### \[Medium\] [100%] [MaxDoubleSliceSum](https://qiita.com/yp2211/items/bcd3546d328bac768136)

---

## Lesson 10: Prime and composite numbers
### \[Easy\] [100%] [CountFactors](https://qiita.com/yp2211/items/d005adf2d3a7642496ad)
### \[Easy\] [100%] [MinPerimeterRectangle](https://qiita.com/yp2211/items/5a54390e498b3dbb7351)
### \[Medium\] [100%] [Flags](https://qiita.com/yp2211/items/c84f4272744c285a44a1)
### \[Medium\] [100%] [Peaks](https://qiita.com/yp2211/items/775d158023b566bb3bc8)

---


## Lesson 11: Sieve of Eratosthenes
### \[Medium\] [100%] [CountNonDivisible](https://qiita.com/yp2211/items/2004c8e98ab3fb6b570a)
### \[Medium\] [100%] [CountSemiprimes](https://qiita.com/yp2211/items/96b368d61f637e58066e)

---

## Lesson 12: Euclidean algorithm
### \[Easy\] [100%] [ChocolatesByNumbers](https://qiita.com/yp2211/items/61b13fca66fb31efc7a2)
### \[Medium\] [100%] [CommonPrimeDivisors](https://qiita.com/yp2211/items/f4ed3941fbeae982a10c)

---

## Lesson 13: Fibonacci numbers
### \[Medium\] [100%] [FibFrog](https://qiita.com/yp2211/items/f19c08977c341ddd52cf)
### \[Medium\] [] [Ladder]()

## Lesson 14: Binary search algorithm
## Lesson 15: Caterpillar method
## Lesson 16: Greedy algorithms
## Lesson 17: Dynamic programming

---