1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| public class _718最长重复子数组 {
public int findLength_binary_search(int[] nums1, int[] nums2) { int max = 0; return max; }
public int findLength_slide_window(int[] nums1, int[] nums2) { int max = 0; int len1 = nums1.length,len2 = nums2.length; for (int i = 0; i < len1; i++) { max = Math.max(max, maxLength(nums1, nums2, i, 0)); } for (int i = 0; i < len2; i++) { max = Math.max(max, maxLength(nums1, nums2, 0, i)); } return max; }
private int maxLength(int[] nums1, int[] nums2, int i1, int i2){ int max = 0; int counter = Math.min(nums1.length-i1, nums2.length-i2); int temp = 0; for (int i = 0; i < counter; i++) { if(nums1[i1+i] == nums2[i2+i]){ temp++; }else { temp = 0; } max = Math.max(max, temp); } return max; }
public int findLength_brute_force(int[] nums1, int[] nums2) { int max = 0; for (int i = 0; i < nums1.length; i++) { for (int j = 0; j < nums2.length; j++) { int n1 = i; int n2 = j; if(nums1[n1] == nums2[j]){ while (n1 < nums1.length && n2 < nums2.length && nums1[n1] == nums2[n2]){ n1++; n2++; max = Math.max(max, n1-i); } } } } return max; }
public int findLength(int[] nums1, int[] nums2) { int max = 0; int[][] dp = new int[nums1.length][nums2.length]; for (int i = 0; i < nums1.length; i++) { dp[i][0] = nums1[i]==nums2[0]?1:0; max = Math.max(max, dp[i][0]); } for (int i = 0; i < nums2.length; i++) { dp[0][i] = nums1[0]==nums2[i]?1:0; max = Math.max(max, dp[0][i]); }
for (int i = 1; i < nums1.length; i++) { for (int j = 1; j < nums2.length; j++) { int temp = nums1[i]==nums2[j]?1:0; dp[i][j] = temp*(dp[i-1][j-1]+temp); max = Math.max(max, dp[i][j]); } } return max; }
public static void main(String[] args) { _718最长重复子数组 longestRepeatingSubarray = new _718最长重复子数组();
System.out.println(longestRepeatingSubarray.findLength_slide_window(new int[]{0,1,1,1,1}, new int[]{1,0,1,0,1})); } }
|