From 7b697e0e41225ab4780990898948b5b7f3ff9247 Mon Sep 17 00:00:00 2001 From: weizhaoquan Date: Mon, 22 Apr 2019 17:37:01 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/byhieg/arithmetic/BubbleSort.java | 32 ++++ .../cn/byhieg/arithmetic/SlidingWindow.java | 139 ++++++++++++++++++ .../arithmetic/TwoDimensionalArray.java | 32 ++++ 3 files changed, 203 insertions(+) create mode 100644 src/main/java/cn/byhieg/arithmetic/BubbleSort.java create mode 100644 src/main/java/cn/byhieg/arithmetic/SlidingWindow.java create mode 100644 src/main/java/cn/byhieg/arithmetic/TwoDimensionalArray.java diff --git a/src/main/java/cn/byhieg/arithmetic/BubbleSort.java b/src/main/java/cn/byhieg/arithmetic/BubbleSort.java new file mode 100644 index 0000000..4a7c2a5 --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/BubbleSort.java @@ -0,0 +1,32 @@ +package cn.byhieg.arithmetic; + +/** + * Created by weizhaoquan on 2019/04/17. + */ +public class BubbleSort { + public static int[] bubbleSort(int[] array){ + if (array.length == 0) { + return array; + } + for (int i = 0;i对时间片计数+1,并返回窗口中所有的计数总和 + *

该方法只要调用就一定会对某个时间片进行+1 + * @return + */ + public int incrementAndSum() { + int index = locationIndex(); + int sum = 0; + // cursor等于index,返回true + // cursor不等于index,返回false,并会将cursor设置为index + int oldCursor = cursor.getAndSet(index); + if (oldCursor == index) { + // 在当前时间片里继续+1 + sum += timeSlices[index].incrementAndGet(); + } else { + //轮到新的时间片,置0,可能有其它线程也置了该值,容许 + timeSlices[index].set(0); + // 清零,访问量不大时会有时间片跳跃的情况 + clearBetween(oldCursor, index); + + sum += timeSlices[index].incrementAndGet(); + } + + for (int i = 1; i < windowSize; i++) { + sum += timeSlices[(index - i + timeSliceSize) % timeSliceSize].get(); + } + return sum; + } + + /** + * 判断是否允许进行访问,未超过阈值的话才会对某个时间片+1 + * @param threshold + * @return + */ + public boolean allow(int threshold) { + int index = locationIndex(); + int sum = 0; + int oldCursor = cursor.getAndSet(index); + if (oldCursor != index) { + timeSlices[index].set(0); + clearBetween(oldCursor, index); + } + for (int i = 0; i < windowSize; i++) { + sum += timeSlices[(index - i + timeSliceSize) % timeSliceSize].get(); + } + + // 阈值判断 + if (sum < threshold) { + // 未超过阈值才+1 + timeSlices[index].incrementAndGet(); + return true; + } + return false; + } + + /** + *

将fromIndex~toIndex之间的时间片计数都清零 + *

极端情况下,当循环队列已经走了超过1个timeSliceSize以上,这里的清零并不能如期望的进行 + * @param fromIndex 不包含 + * @param toIndex 不包含 + */ + private void clearBetween(int fromIndex, int toIndex) { + for (int index = (fromIndex + 1) % timeSliceSize; index != toIndex; index = (index + 1) % timeSliceSize) { + timeSlices[index].set(0); + } + } + + public static void main(String[] args) { + SlidingWindow window = new SlidingWindow(5, Time.MILLISECONDS); + for (int i = 0; i < 10; i++) { + System.out.println(window.allow(7)); + } + } +} \ No newline at end of file diff --git a/src/main/java/cn/byhieg/arithmetic/TwoDimensionalArray.java b/src/main/java/cn/byhieg/arithmetic/TwoDimensionalArray.java new file mode 100644 index 0000000..27534ee --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/TwoDimensionalArray.java @@ -0,0 +1,32 @@ +package cn.byhieg.arithmetic; + +/** + * Created by weizhaoquan on 2019/04/08. + */ +public class TwoDimensionalArray { + public static int[][] rotate(int[][] matrix){ + int n= matrix.length; + int[][] m = new int[n][n]; + for (int row = 0;row < n; row ++) { + for (int col=0;col Date: Tue, 14 May 2019 17:26:58 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/byhieg/arithmetic/TwoSum.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main/java/cn/byhieg/arithmetic/TwoSum.java diff --git a/src/main/java/cn/byhieg/arithmetic/TwoSum.java b/src/main/java/cn/byhieg/arithmetic/TwoSum.java new file mode 100644 index 0000000..026e72b --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/TwoSum.java @@ -0,0 +1,41 @@ +package cn.byhieg.arithmetic; + +import java.util.Arrays; +import java.util.HashMap; + +/** + * Created by weizhaoquan on 2019/05/09. + */ +public class TwoSum { + public static int[] twoSum1(int[] nums, int target) { + HashMap map = new HashMap<>(); + for(int i = 0; i < nums.length; i++) { + map.put(nums[i], i); + } + for(int i = 0; i < nums.length; i++){ + int val = target - nums[i]; + if(map.containsKey(val) && map.get(val) != i){ + return new int[]{i, map.get(val)}; + } + } + throw new RuntimeException("No such solution!"); + } + public static int[] twoSum2(int[] nums, int target) { + HashMap map = new HashMap<>(); + for(int i = 0; i < nums.length; i++){ + int val = target - nums[i]; + if(map.containsKey(val)) {// 肯定不会map.get(val) == i + return new int[]{i, map.get(val)}; + } + map.put(nums[i], i); + } + throw new RuntimeException("No such solution!"); + } + + public static void main(String[] args) { + int[] nums = {2,7,11,15}; + int taget = 9; + int[] ints = twoSum1( nums, taget ); + System.out.printf( Arrays.toString(ints) ); + } +} From 2a462abf370ed024364773f3549838bc52f5d79b Mon Sep 17 00:00:00 2001 From: weizhaoquan Date: Mon, 27 May 2019 20:31:30 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E4=B8=A4=E6=95=B0=E4=B9=8B=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/byhieg/arithmetic/TwoSum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cn/byhieg/arithmetic/TwoSum.java b/src/main/java/cn/byhieg/arithmetic/TwoSum.java index 026e72b..b3dd37c 100644 --- a/src/main/java/cn/byhieg/arithmetic/TwoSum.java +++ b/src/main/java/cn/byhieg/arithmetic/TwoSum.java @@ -35,7 +35,7 @@ public static int[] twoSum2(int[] nums, int target) { public static void main(String[] args) { int[] nums = {2,7,11,15}; int taget = 9; - int[] ints = twoSum1( nums, taget ); + int[] ints = twoSum2( nums, taget ); System.out.printf( Arrays.toString(ints) ); } } From c0a8b7854be4e7573f0855db6b337e53a056acfa Mon Sep 17 00:00:00 2001 From: weizhaoquan Date: Mon, 27 May 2019 21:03:13 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=B8=A4=E6=95=B0=E4=B9=8B=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/byhieg/arithmetic/BubbleSort.java | 32 ---------- .../cn/byhieg/arithmetic/sort/BubbleSort.java | 60 +++++++++++++++++++ 2 files changed, 60 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/cn/byhieg/arithmetic/BubbleSort.java create mode 100644 src/main/java/cn/byhieg/arithmetic/sort/BubbleSort.java diff --git a/src/main/java/cn/byhieg/arithmetic/BubbleSort.java b/src/main/java/cn/byhieg/arithmetic/BubbleSort.java deleted file mode 100644 index 4a7c2a5..0000000 --- a/src/main/java/cn/byhieg/arithmetic/BubbleSort.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.byhieg.arithmetic; - -/** - * Created by weizhaoquan on 2019/04/17. - */ -public class BubbleSort { - public static int[] bubbleSort(int[] array){ - if (array.length == 0) { - return array; - } - for (int i = 0;i0;end--) { + boolean isSort = true; + for (int i = 0 ;iarr[i+1]) { + swap( arr,i,i+1 ); + isSort = false; + } + } + if (isSort) { + break; + } + } + } + + public static int[] bubbleSort(int[] array){ + if (array.length == 0) { + return array; + } + for (int i = 0;i Date: Wed, 29 May 2019 07:47:23 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/byhieg/arithmetic/sort/SelectSort.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java diff --git a/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java b/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java new file mode 100644 index 0000000..0725ba2 --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java @@ -0,0 +1,19 @@ +package cn.byhieg.arithmetic.sort; + +public class SelectSort { + static void swap(int[] arr,int i,int j){ + int temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + + static void selectSort(int[] arr){ + for (int i = 0;i Date: Wed, 29 May 2019 08:16:19 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javaturorial.iml | 2 +- .../cn/byhieg/arithmetic/sort/SelectSort.java | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/javaturorial.iml b/javaturorial.iml index 4e3316b..175c741 100644 --- a/javaturorial.iml +++ b/javaturorial.iml @@ -10,7 +10,7 @@ - + \ No newline at end of file diff --git a/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java b/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java index 0725ba2..d76b01e 100644 --- a/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java +++ b/src/main/java/cn/byhieg/arithmetic/sort/SelectSort.java @@ -1,5 +1,7 @@ package cn.byhieg.arithmetic.sort; +import java.util.Arrays; + public class SelectSort { static void swap(int[] arr,int i,int j){ int temp = arr[i]; @@ -16,4 +18,38 @@ static void selectSort(int[] arr){ } } } + + static int[] selectSort1(int[] sourceArr){ + int[] arr = Arrays.copyOf(sourceArr,sourceArr.length); + for (int i = 0;i Date: Wed, 29 May 2019 12:45:41 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E5=86=92=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/byhieg/arithmetic/sort/BubbleSort.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/cn/byhieg/arithmetic/sort/BubbleSort.java b/src/main/java/cn/byhieg/arithmetic/sort/BubbleSort.java index 511b1be..a68c190 100644 --- a/src/main/java/cn/byhieg/arithmetic/sort/BubbleSort.java +++ b/src/main/java/cn/byhieg/arithmetic/sort/BubbleSort.java @@ -25,6 +25,17 @@ static void bubbleSort1(int[] arr){ } } + static void bubbleSort2(int[] arr){ + for (int end = arr.length;end >0 ;end--) { + int border = 0 ; + for (int i= 0;i Date: Wed, 29 May 2019 13:44:56 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E6=8F=92=E5=85=A5=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/byhieg/arithmetic/sort/InsertSort.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/cn/byhieg/arithmetic/sort/InsertSort.java diff --git a/src/main/java/cn/byhieg/arithmetic/sort/InsertSort.java b/src/main/java/cn/byhieg/arithmetic/sort/InsertSort.java new file mode 100644 index 0000000..725e904 --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/sort/InsertSort.java @@ -0,0 +1,35 @@ +package cn.byhieg.arithmetic.sort; + +import java.util.Arrays; + +/** + * Created by weizhaoquan on 2019/05/29. + */ +public class InsertSort { + static int[] insertSort(int[] sourceArr){ + int[] arr = Arrays.copyOf(sourceArr,sourceArr.length); + for (int i = 1;i0 && temp Date: Wed, 29 May 2019 21:05:51 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E6=8F=92=E5=85=A5=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../arithmetic/sort/dichotomyInsertSort.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java diff --git a/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java b/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java new file mode 100644 index 0000000..1a4cb86 --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java @@ -0,0 +1,35 @@ +package cn.byhieg.arithmetic.sort; + +/** + * Created by weizhaoquan on 2019/05/29. + * 二分查找型 + */ +public class dichotomyInsertSort { + static void insertSort(int[] arr){ + for (int i = 1;ikey) { + R= mid-1; + }else{ + L=mid+1; + } + } + for (int j = i-1;j>=L;j--) { + arr[j+1] =arr[j]; + arr[L]=key; + } + } + } + public static void main(String[] args){ + int[] arr = {6,3,5,7,3,7,8,9,1}; + insertSort(arr); + System.out.printf( "1排序后的数组为 :" ); + for (int num:arr) { + System.out.printf(" "+num); + } + + } +} From 05573f6b77b72114cfdc269d35321d0c000e38e3 Mon Sep 17 00:00:00 2001 From: ziyuruolan Date: Thu, 30 May 2019 08:26:04 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java b/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java index 1a4cb86..35d4f05 100644 --- a/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java +++ b/src/main/java/cn/byhieg/arithmetic/sort/dichotomyInsertSort.java @@ -19,12 +19,13 @@ static void insertSort(int[] arr){ } for (int j = i-1;j>=L;j--) { arr[j+1] =arr[j]; - arr[L]=key; } + arr[L] = key; + } } public static void main(String[] args){ - int[] arr = {6,3,5,7,3,7,8,9,1}; + int[] arr = {3,6,5,7,3,7,8,9,1}; insertSort(arr); System.out.printf( "1排序后的数组为 :" ); for (int num:arr) { From 8fee9a6af71535bcd00b9209a840d7ee6b1f2199 Mon Sep 17 00:00:00 2001 From: weizhaoquan Date: Tue, 4 Jun 2019 21:02:19 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E5=B8=8C=E5=B0=94=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/byhieg/arithmetic/sort/ShellSort.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/cn/byhieg/arithmetic/sort/ShellSort.java diff --git a/src/main/java/cn/byhieg/arithmetic/sort/ShellSort.java b/src/main/java/cn/byhieg/arithmetic/sort/ShellSort.java new file mode 100644 index 0000000..a9ebb41 --- /dev/null +++ b/src/main/java/cn/byhieg/arithmetic/sort/ShellSort.java @@ -0,0 +1,28 @@ +package cn.byhieg.arithmetic.sort; + +/** + * Created by weizhaoquan on 2019/06/04. + */ +public class ShellSort { + static void shellSort(int[] arr){ + for (int g= arr.length;g>0;g/=2) { + for (int end = g;end=0 && key