Skip to content

Commit

Permalink
Fuck ring replacement
Browse files Browse the repository at this point in the history
Fuck this shit
Stupid bitch ass
Fuck you little fucker
  • Loading branch information
PRESIDENT810 committed Jan 30, 2020
1 parent 974c373 commit 85c3519
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 61 deletions.
79 changes: 36 additions & 43 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 9 additions & 1 deletion 189. 旋转数组/src/main.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import java.util.Arrays;

public class main {
public static void main(String args[]) {
int[] arr = {1, 2, 3, 4, 5, 6};
new Solution189().rotate(arr, 4);
System.out.print(Arrays.toString(arr));
}
}

class Solution {
class Solution189 {
public void reverse(int[] nums, int start, int end){
int temp;
while (start != end && start != end+1) {
Expand All @@ -14,6 +21,7 @@ public void reverse(int[] nums, int start, int end){
}

public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums, 0, nums.length-1);
reverse(nums, 0, k-1);
reverse(nums, k, nums.length-1);
Expand Down
18 changes: 1 addition & 17 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,25 +319,9 @@ class Solution {

## 189. 旋转数组

- 环状替换

如果我们直接把每一个数字放到它最后的位置,但这样的后果是遗失原来的元素。因此,我们需要把被替换的数字保存在变量
temp里面。然后,我们将被替换数字(temp)放到它正确的位置,并继续这个过程n次,
n 是数组的长度。这是因为我们需要将数组里所有的元素都移动。
但是,这种方法可能会有个问题,如果n%k==0,其中k=k%n (因为如果k大于n,移动
k次实际上相当于移动k%n 次)。
这种情况下,我们会发现在没有遍历所有数字的情况下回到出发数字。此时,我们应该从下一个数字开始再重复相同的过程。

现在,我们看看上面方法的证明。假设,数组里我们有n个元素并且k是要求移动的次数。更进一步,假设
n%k=0 。第一轮中,所有移动数字的下标i满足i%k==0。这是因为我们每跳k步,我们只会到达相距为
k个位置下标的数。每一轮,我们都会移动n/k个元素。下一轮中,我们会移动满足
i%k==1的位置的数。这样的轮次会一直持续到我们再次遇到i%k==0 的地方为止,
此时i=k。此时在正确位置上的数字共有k*n/k=n 个。因此所有数字都在正确位置上。


- 反转

这个方法基于这个事实:当我们旋转数组 k 次, k%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。
这个方法基于这个事实:当我们旋转数组k次, k%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。

在这个方法中,我们首先将所有元素反转。然后反转前 k 个元素,再反转后面 n−k 个元素,就能得到想要的结果。

Expand Down

0 comments on commit 85c3519

Please sign in to comment.