diff --git a/283/283.md b/283/283.md new file mode 100644 index 0000000..c1633e6 --- /dev/null +++ b/283/283.md @@ -0,0 +1,59 @@ +## 何も見ずに解いてみる + +```cpp +class Solution { +public: + void moveZeroes(vector& nums) { + int index = 0; + for (int i = 0; i < nums.size(); ++i) { + if (nums[i] != 0) { + swap(nums[i], nums[index]); + ++index; + } + } + } +}; +``` + +## 他の人のコードを見てみる + +https://github.com/tokuhirat/LeetCode/pull/54 +https://github.com/ryosuketc/leetcode_arai60/pull/54 +https://github.com/Ryotaro25/leetcode_first60/pull/59 +https://github.com/usatie/leetcode/pull/3 + +iter_swapというのを使っても書けるみたい。(swap(*it, *non_zero_it++)でも動くには動く) + +```cpp +class Solution { +public: + void moveZeroes(vector& nums) { + auto non_zero_it = nums.begin(); + for (auto it = nums.begin(); it < nums.end(); ++it) { + if (*it != 0) { + iter_swap(it, non_zero_it++); + } + } + } +}; +``` + +## 最終コード + +`non_zero_index`は誤解のないように書けば`index_to_put_next_non_zero_element`ぐらいの名前にしたいが、長くなりすぎるので迷う。 +コメントをつけてもいいかも。 + +```cpp +class Solution { +public: + void moveZeroes(vector& nums) { + int non_zero_index = 0; + for (int i = 0; i < nums.size(); ++i) { + if (nums[i] != 0) { + swap(nums[i], nums[non_zero_index]); + ++non_zero_index; + } + } + } +}; +```