Skip to content

Commit 55693bf

Browse files
committed
数据结构开篇
1 parent 1449ea8 commit 55693bf

16 files changed

Lines changed: 506 additions & 0 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package 数据结构.位运算;
2+
3+
/**
4+
* Created by 周杰伦 on 2018/4/13.
5+
*/
6+
public class 统计两个数的二进制表示有多少位不同 {
7+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package 数据结构.哈希表;
2+
3+
import java.util.HashMap;
4+
5+
/**
6+
* Created by 周杰伦 on 2018/4/13.
7+
*/
8+
public class 判断数组是否含有相同元素 {
9+
public boolean containsDuplicate(int[] nums) {
10+
HashMap<Integer, Integer> map = new HashMap<>();
11+
for (int i = 0;i < nums.length;i ++) {
12+
if (map.containsKey(nums[i])) {
13+
return true;
14+
}else {
15+
map.put(nums[i], 1);
16+
}
17+
}
18+
return false;
19+
}
20+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package 数据结构.哈希表;
2+
3+
import java.util.Arrays;
4+
import java.util.HashMap;
5+
6+
/**
7+
* Created by 周杰伦 on 2018/4/13.
8+
*/
9+
public class 数组中的两个数和为给定值 {
10+
public static void main(String[] args) {
11+
int []a = {3,2,4};
12+
System.out.println(Arrays.toString(twoSum(a, 6)));
13+
}
14+
public static int[] twoSum(int[] nums, int target) {
15+
int []two = new int[2];
16+
HashMap<Integer, Integer> map = new HashMap<>();
17+
for (int i = 0;i < nums.length;i ++) {
18+
map.put(nums[i],i);
19+
}
20+
for (int i = 0;i < nums.length;i ++) {
21+
if (map.containsKey(target - nums[i])) {
22+
if (i == map.get(target - nums[i])) {
23+
continue;
24+
}
25+
two[0] = i;
26+
two[1] = map.get(target - nums[i]);
27+
return two;
28+
}
29+
}
30+
return two;
31+
}
32+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package 数据结构.哈希表;
2+
3+
import java.util.Arrays;
4+
import java.util.HashMap;
5+
6+
/**
7+
* Created by 周杰伦 on 2018/4/13.
8+
*/
9+
public class 最长和谐序列 {
10+
public static void main(String[] args) {
11+
int []a = {1,3,2,2,5,2,3,7};
12+
System.out.println(findLHS(a));
13+
}
14+
15+
public static int findLHS(int[] nums) {
16+
int cnt = 1;
17+
HashMap<Integer, Integer> map = new HashMap<>();
18+
for (int i = 0;i < nums.length;i ++) {
19+
if (map.containsKey(nums[i])) {
20+
cnt ++;
21+
}else {
22+
map.put(nums[i], i);
23+
if (map.containsKey(nums[i] - 1) || map.containsKey(nums[i] + 1)) {
24+
cnt ++;
25+
}
26+
}
27+
}
28+
return cnt;
29+
}
30+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package 数据结构.;
2+
3+
/**
4+
* Created by 周杰伦 on 2018/4/13.
5+
*/
6+
public class 冗余连接 {
7+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package 数据结构.字符串;
2+
3+
/**
4+
* Created by 周杰伦 on 2018/4/13.
5+
*/
6+
public class 两个字符串包含的字符是否完全相同 {
7+
public boolean isAnagram(String s, String t) {
8+
int[] map = new int[26];
9+
for (int i = 0;i < s.length();i ++) {
10+
map[s.charAt(i) - 'a'] += 1;
11+
}
12+
for (int i = 0;i < t.length();i ++) {
13+
map[s.charAt(i) - 'a'] -= 1;
14+
}
15+
for (int i : map) {
16+
if (i != 0)return false;
17+
}
18+
return true;
19+
}
20+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package 数据结构.数组与矩阵;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* Created by 周杰伦 on 2018/4/13.
7+
*/
8+
public class 把数组中的0移到末尾 {
9+
public static void main(String[] args) {
10+
int []a = {0, 1, 0, 3, 12};
11+
moveZeroes(a);
12+
System.out.println(Arrays.toString(a));
13+
}
14+
public static void moveZeroes(int[] nums){
15+
int index = 0;
16+
for (int i = 0;i < nums.length;i ++) {
17+
if (nums[i] != 0) {
18+
nums[index] = nums[i];
19+
index ++;
20+
}
21+
}
22+
Arrays.fill(nums,index, nums.length, 0);
23+
}
24+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package 数据结构.栈和队列;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* Created by 周杰伦 on 2018/4/13.
7+
*/
8+
public class 在另一个数组中比当前元素大的下一个元素 {
9+
//这题的测试用例有点问题
10+
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
11+
int []big = new int[nums1.length];
12+
Arrays.fill(big, -1);
13+
for (int i = 0;i < nums1.length;i ++) {
14+
for (int j = i + 1;j < nums2.length;j ++) {
15+
if (nums2[j] > nums1[i]) {
16+
big[i] = nums2[j];
17+
break;
18+
}
19+
}
20+
}
21+
return big;
22+
}
23+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package 数据结构.栈和队列;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* Created by 周杰伦 on 2018/4/13.
7+
*/
8+
public class 循环数组中比当前元素大的下一个元素 {
9+
//旋转数组很好的解决方式就是复制一份接在后面
10+
public int[] nextGreaterElements(int[] nums) {
11+
int []big = new int[nums.length];
12+
int []newnum = new int[nums.length * 2];
13+
Arrays.fill(big, -1);
14+
for (int i = 0;i < nums.length;i ++) {
15+
newnum[i] = nums[i];
16+
}
17+
for (int i = nums.length;i < newnum.length;i ++) {
18+
newnum[i] = nums[i - nums.length];
19+
}
20+
for (int i = 0;i < nums.length;i ++) {
21+
for (int j = i + 1;j < newnum.length;j ++) {
22+
if (newnum[j] > nums[i]) {
23+
big[i] = newnum[j];
24+
break;
25+
}
26+
}
27+
}
28+
return big;
29+
}
30+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package 数据结构.栈和队列;
2+
3+
import java.util.Stack;
4+
5+
/**
6+
* Created by 周杰伦 on 2018/4/13.
7+
*/
8+
public class 括号匹配 {
9+
public static void main(String[] args) {
10+
11+
}
12+
public boolean isValid(String s) {
13+
Stack<Character> stack = new Stack<>();
14+
for (int i = 0;i < s.length();i ++) {
15+
char c = s.charAt(i);
16+
switch (c) {
17+
case '(' : stack.push(c);
18+
break;
19+
case '[' : stack.push(c);
20+
break;
21+
case '{' : stack.push(c);
22+
break;
23+
case ')' : {
24+
if (!stack.isEmpty() && stack.peek() == '(') {
25+
stack.pop();
26+
break;
27+
}else return false;
28+
}
29+
case ']' : {
30+
if (!stack.isEmpty() && stack.peek() == '[') {
31+
stack.pop();
32+
break;
33+
}else return false;
34+
}
35+
case '}' : {
36+
if (!stack.isEmpty() && stack.peek() == '{') {
37+
stack.pop();
38+
}else return false;
39+
}
40+
}
41+
}
42+
if (stack.isEmpty()) {
43+
return true;
44+
}else return false;
45+
}
46+
}

0 commit comments

Comments
 (0)