forked from algorithm008-class02/algorithm008-class02
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWeek1.java
More file actions
150 lines (121 loc) · 3.6 KB
/
Week1.java
File metadata and controls
150 lines (121 loc) · 3.6 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package com.chengli.config;
import java.util.HashMap;
public class Week1 {
//去除重复项
public int removeDuplicates(int[] nums) {
int length = nums.length;
int i = 0;
for (int j = 0; j < length; j++) {
if (nums[i] != nums[j]) {
nums[i + 1] = nums[j];
i++;
}
}
return i + 1;
}
//移动零
public void moveZeroes(int[] nums) {
int i = 0;
for (int j = 0; j < nums.length; j++) {
if (nums[j] != 0) {
nums[i] = nums[j];
if (i != j) {
nums[j] = 0;
}
i++;
}
}
}
//两数字之和
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (hashMap.containsKey(complement)) {
return new int[]{hashMap.get(complement), i};
}
hashMap.put(nums[i], i);
}
return null;
}
//两个有序数组的合并 为何跑代码会出现超时的错误
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] nums1Copy = new int[m];
System.arraycopy(nums1, 0, nums1Copy, 0, m);
int p1 = 0;
int p2 = 0;
int p = 0;
while (p1 < m && p2 < n)
nums1[p++] = (nums1[p1] < nums2[p2]) ? nums1Copy[p1++] : nums2[p2++];
while (p1 < m) {
System.arraycopy(nums1Copy, p1, nums1, p1 + p2, m + n - p1 - p2);
}
if (p2 < n) {
System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2);
}
}
//两个有序数组合并解法2 双指针
public void merge2(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1;
int p2 = n - 1;
int p = m + n - 1;
while (p1 >= 0 && p2 >= 0)
nums1[p--] = (nums1[p1] < nums2[p2]) ? nums2[p2--] : nums1[p1--];
if (p1 < 0) {
while (p2 >= 0) {
nums1[p--] = nums2[p2--];
}
}
}
//66题加1
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]++;
int i1 = digits[i] % 10;
if (i1 != 0) {
return digits;
}
digits[i] = 0;
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
//合并两个有序连标
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(-1);
ListNode prev = prehead;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
prev.next = l1;
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}
prev.next = l1 == null ? l2 : l1;
return prehead.next;
}
//旋转数组 暴力求解法
public void rotate(int[] nums, int k) {
int previous, temp;
for (int i = 0; i < k; i++) {
previous = nums[nums.length - 1];
for (int j = 0; j < nums.length; ++j) {
temp=nums[j];
nums[j] = previous;
previous = temp;
}
}
}
//那个接雨水的不太会 我再理解理解。。。。。。
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}