Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
GreyZeng
algorithm
提交
fe8fcd94
A
algorithm
项目概览
GreyZeng
/
algorithm
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fe8fcd94
编写于
12月 15, 2022
作者:
GreyZeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sort alg
上级
fea2f915
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
149 addition
and
149 deletion
+149
-149
src/main/java/算法/位运算/Code_PrintBinary.java
src/main/java/算法/位运算/Code_PrintBinary.java
+51
-50
src/main/java/算法/排序/Code_Sort.java
src/main/java/算法/排序/Code_Sort.java
+87
-85
src/main/java/练习题/LeetCode_0001_TwoSum.java
src/main/java/练习题/LeetCode_0001_TwoSum.java
+11
-14
未找到文件。
src/main/java/算法/位运算/Code_PrintBinary.java
浏览文件 @
fe8fcd94
...
...
@@ -2,59 +2,60 @@ package 算法.位运算;
// 二进制与位运算
public
class
Code_PrintBinary
{
// 打印一个32位整数的二进制形式
public
static
void
printBinary
(
int
num
)
{
for
(
int
i
=
31
;
i
>=
0
;
i
--)
{
System
.
out
.
print
((
num
&
(
1
<<
i
))
==
0
?
"0"
:
"1"
);
}
System
.
out
.
println
();
// 打印一个32位整数的二进制形式
public
static
void
printBinary
(
int
num
)
{
for
(
int
i
=
31
;
i
>=
0
;
i
--)
{
System
.
out
.
print
((
num
&
(
1
<<
i
))
==
0
?
"0"
:
"1"
);
}
System
.
out
.
println
();
}
public
static
int
leftMostOne
(
int
num
)
{
return
num
&
(-
num
);
}
public
static
int
leftMostOne2
(
int
num
)
{
return
num
&
(~
num
+
1
);
}
// 取一个数最右侧的1
public
static
int
leftMostOne
(
int
num
)
{
return
num
&
(-
num
);
}
public
static
void
main
(
String
[]
args
)
{
printBinary
(
22
);
printBinary
(
leftMostOne
(
22
));
System
.
out
.
println
(
leftMostOne
(
22
));
boolean
right
=
true
;
int
times
=
Integer
.
MAX_VALUE
;
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
if
(
leftMostOne
(
i
)
!=
leftMostOne2
(
i
))
{
right
=
false
;
break
;
}
}
if
(!
right
)
{
System
.
out
.
println
(
"oops"
);
}
else
{
System
.
out
.
println
(
"right"
);
}
public
static
int
leftMostOne2
(
int
num
)
{
return
num
&
(~
num
+
1
);
}
int
num
=
0b10001010_11101010_10001000_11101010
;
System
.
out
.
println
(
"要处理的数据是:"
);
System
.
out
.
println
(
"10001010111010101000100011101010"
);
System
.
out
.
println
(
"原始串:"
);
printBinary
(
num
);
System
.
out
.
println
(
"取反:"
);
printBinary
(~
num
);
System
.
out
.
println
(
"左移一位:"
);
printBinary
(
num
<<
1
);
System
.
out
.
println
(
"有符号右移一位:"
);
printBinary
(
num
>>
1
);
System
.
out
.
println
(
"无符号右移一位:"
);
printBinary
(
num
>>>
1
);
System
.
out
.
println
(
"系统最大值的二进制:"
);
printBinary
(
Integer
.
MAX_VALUE
);
System
.
out
.
println
(
"系统最小值的二进制:"
);
printBinary
(
Integer
.
MIN_VALUE
);
System
.
out
.
println
(
"负的系统最小值的二进制(还是本身):"
);
printBinary
(-
Integer
.
MIN_VALUE
);
System
.
out
.
println
((-
Integer
.
MIN_VALUE
)
==
Integer
.
MIN_VALUE
);
public
static
void
main
(
String
[]
args
)
{
printBinary
(
22
);
printBinary
(
leftMostOne
(
22
));
System
.
out
.
println
(
leftMostOne
(
22
));
boolean
right
=
true
;
int
times
=
Integer
.
MAX_VALUE
;
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
if
(
leftMostOne
(
i
)
!=
leftMostOne2
(
i
))
{
right
=
false
;
break
;
}
}
if
(!
right
)
{
System
.
out
.
println
(
"oops"
);
}
else
{
System
.
out
.
println
(
"right"
);
}
int
num
=
0b10001010_11101010_10001000_11101010
;
System
.
out
.
println
(
"要处理的数据是:"
);
System
.
out
.
println
(
"10001010111010101000100011101010"
);
System
.
out
.
println
(
"原始串:"
);
printBinary
(
num
);
System
.
out
.
println
(
"取反:"
);
printBinary
(~
num
);
System
.
out
.
println
(
"左移一位:"
);
printBinary
(
num
<<
1
);
System
.
out
.
println
(
">> 表示有符号右移一位:"
);
printBinary
(
num
>>
1
);
System
.
out
.
println
(
">>> 表示无符号右移一位:"
);
printBinary
(
num
>>>
1
);
System
.
out
.
println
(
"系统最大值的二进制:"
);
printBinary
(
Integer
.
MAX_VALUE
);
System
.
out
.
println
(
"系统最小值的二进制:"
);
printBinary
(
Integer
.
MIN_VALUE
);
System
.
out
.
println
(
"负的系统最小值的二进制(还是本身):"
);
printBinary
(-
Integer
.
MIN_VALUE
);
// System.out.println(-Integer.MIN_VALUE == Integer.MIN_VALUE);
}
}
src/main/java/算法/排序/Code_Sort.java
浏览文件 @
fe8fcd94
...
...
@@ -3,109 +3,111 @@ package 算法.排序;
import
java.util.Arrays
;
/**
* 冒泡,选择,插入排序
*
* @author Grey
* @see <a href="https://www.cnblogs.com/greyzeng/p/15186769.html">
笔记
</a>
* @see <a href="https://www.cnblogs.com/greyzeng/p/15186769.html">
简单排序
</a>
*/
public
class
Code_Sort
{
// 冒泡排序
public
static
void
bubbleSort
(
int
[]
arr
)
{
if
(
arr
==
null
||
arr
.
length
<
2
)
{
return
;
}
for
(
int
i
=
arr
.
length
-
1
;
i
>=
0
;
i
--)
{
for
(
int
j
=
0
;
j
<
i
;
j
++)
{
if
(
arr
[
j
]
>
arr
[
j
+
1
])
{
swap
(
arr
,
j
,
j
+
1
);
}
}
// 冒泡排序
public
static
void
bubbleSort
(
int
[]
arr
)
{
if
(
arr
==
null
||
arr
.
length
<
2
)
{
return
;
}
for
(
int
i
=
arr
.
length
-
1
;
i
>=
0
;
i
--)
{
for
(
int
j
=
0
;
j
<
i
;
j
++)
{
if
(
arr
[
j
]
>
arr
[
j
+
1
])
{
swap
(
arr
,
j
,
j
+
1
);
}
}
}
}
// 插入排序
public
static
void
insertionSort
(
int
[]
arr
)
{
if
(
arr
==
null
||
arr
.
length
<
2
)
{
return
;
}
for
(
int
i
=
1
;
i
<
arr
.
length
;
i
++)
{
// 比前一个小才需要交换
for
(
int
j
=
i
-
1
;
j
>=
0
&&
arr
[
j
]
>
arr
[
j
+
1
];
j
--)
{
swap
(
arr
,
j
,
j
+
1
);
}
}
// 插入排序
public
static
void
insertionSort
(
int
[]
arr
)
{
if
(
arr
==
null
||
arr
.
length
<
2
)
{
return
;
}
for
(
int
i
=
1
;
i
<
arr
.
length
;
i
++)
{
// 比前一个小才需要交换
for
(
int
j
=
i
-
1
;
j
>=
0
&&
arr
[
j
]
>
arr
[
j
+
1
];
j
--)
{
swap
(
arr
,
j
,
j
+
1
);
}
}
}
// 选择排序
public
static
void
selectionSort
(
int
[]
arr
)
{
if
(
null
==
arr
||
arr
.
length
<
2
)
{
return
;
}
for
(
int
i
=
0
;
i
<
arr
.
length
-
1
;
i
++)
{
int
min
=
i
;
for
(
int
j
=
i
+
1
;
j
<
arr
.
length
;
j
++)
{
min
=
arr
[
j
]
>
arr
[
min
]
?
min
:
j
;
}
swap
(
arr
,
i
,
min
);
}
// 选择排序
public
static
void
selectionSort
(
int
[]
arr
)
{
if
(
null
==
arr
||
arr
.
length
<
2
)
{
return
;
}
private
static
void
swap
(
int
[]
arr
,
int
i
,
int
j
)
{
if
(
arr
==
null
||
arr
.
length
<
2
)
{
return
;
}
if
(
i
!=
j
)
{
arr
[
i
]
=
arr
[
i
]
^
arr
[
j
];
arr
[
j
]
=
arr
[
i
]
^
arr
[
j
];
arr
[
i
]
=
arr
[
i
]
^
arr
[
j
];
}
for
(
int
i
=
0
;
i
<
arr
.
length
-
1
;
i
++)
{
int
min
=
i
;
for
(
int
j
=
i
+
1
;
j
<
arr
.
length
;
j
++)
{
min
=
arr
[
j
]
>
arr
[
min
]
?
min
:
j
;
}
swap
(
arr
,
i
,
min
);
}
}
// for test
public
static
void
absRight
(
int
[]
arr
)
{
Arrays
.
sort
(
arr
)
;
private
static
void
swap
(
int
[]
arr
,
int
i
,
int
j
)
{
if
(
arr
==
null
||
arr
.
length
<
2
)
{
return
;
}
if
(
i
!=
j
)
{
arr
[
i
]
=
arr
[
i
]
^
arr
[
j
];
arr
[
j
]
=
arr
[
i
]
^
arr
[
j
];
arr
[
i
]
=
arr
[
i
]
^
arr
[
j
];
}
}
private
static
int
[]
generateRandomArray
(
int
maxSize
,
int
maxValue
)
{
// Math.random() -> [0,1)
// Math.random() * N -> [0,N)
// (int)(Math.random()*N) -> [0,N-1]
int
[]
arr
=
new
int
[(
int
)
(
Math
.
random
()
*
(
maxSize
+
1
))];
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
// [-? , +?]
arr
[
i
]
=
(
int
)
((
maxValue
+
1
)
*
Math
.
random
())
-
(
int
)
((
maxValue
+
1
)
*
Math
.
random
());
}
return
arr
;
// for test
public
static
void
absRight
(
int
[]
arr
)
{
Arrays
.
sort
(
arr
);
}
private
static
int
[]
generateRandomArray
(
int
maxSize
,
int
maxValue
)
{
// Math.random() -> [0,1)
// Math.random() * N -> [0,N)
// (int)(Math.random()*N) -> [0,N-1]
int
[]
arr
=
new
int
[(
int
)
(
Math
.
random
()
*
(
maxSize
+
1
))];
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
// [-? , +?]
arr
[
i
]
=
(
int
)
((
maxValue
+
1
)
*
Math
.
random
())
-
(
int
)
((
maxValue
+
1
)
*
Math
.
random
());
}
return
arr
;
}
private
static
int
[]
copyArray
(
int
[]
arr1
)
{
if
(
arr1
==
null
)
{
return
null
;
}
int
[]
arr2
=
new
int
[
arr1
.
length
];
System
.
arraycopy
(
arr1
,
0
,
arr2
,
0
,
arr1
.
length
);
return
arr2
;
private
static
int
[]
copyArray
(
int
[]
arr1
)
{
if
(
arr1
==
null
)
{
return
null
;
}
int
[]
arr2
=
new
int
[
arr1
.
length
];
System
.
arraycopy
(
arr1
,
0
,
arr2
,
0
,
arr1
.
length
);
return
arr2
;
}
public
static
void
main
(
String
[]
args
)
{
int
times
=
500000
;
// 测试的次数
int
maxSize
=
100
;
// 数组的最大长度是100
int
maxValue
=
100
;
// 数组元素的大小[-100,100]
boolean
succeed
=
true
;
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
int
[]
arr1
=
generateRandomArray
(
maxSize
,
maxValue
);
int
[]
arr2
=
copyArray
(
arr1
);
int
[]
arr3
=
copyArray
(
arr1
);
int
[]
arr4
=
copyArray
(
arr1
);
bubbleSort
(
arr1
);
selectionSort
(
arr2
);
insertionSort
(
arr3
);
absRight
(
arr4
);
if
(!
Arrays
.
equals
(
arr1
,
arr4
)
||
!
Arrays
.
equals
(
arr2
,
arr4
)
||
!
Arrays
.
equals
(
arr3
,
arr4
))
{
succeed
=
false
;
break
;
}
}
System
.
out
.
println
(
succeed
?
"Nice!"
:
"Fucking fucked!"
);
public
static
void
main
(
String
[]
args
)
{
int
times
=
500000
;
// 测试的次数
int
maxSize
=
100
;
// 数组的最大长度是100
int
maxValue
=
100
;
// 数组元素的大小[-100,100]
boolean
succeed
=
true
;
for
(
int
i
=
0
;
i
<
times
;
i
++)
{
int
[]
arr1
=
generateRandomArray
(
maxSize
,
maxValue
);
int
[]
arr2
=
copyArray
(
arr1
);
int
[]
arr3
=
copyArray
(
arr1
);
int
[]
arr4
=
copyArray
(
arr1
);
bubbleSort
(
arr1
);
selectionSort
(
arr2
);
insertionSort
(
arr3
);
absRight
(
arr4
);
if
(!
Arrays
.
equals
(
arr1
,
arr4
)
||
!
Arrays
.
equals
(
arr2
,
arr4
)
||
!
Arrays
.
equals
(
arr3
,
arr4
))
{
succeed
=
false
;
break
;
}
}
System
.
out
.
println
(
succeed
?
"Nice!"
:
"Fucking fucked!"
);
}
}
src/main/java/练习题/LeetCode_0001_TwoSum.java
浏览文件 @
fe8fcd94
...
...
@@ -3,20 +3,17 @@ package 练习题;
import
java
.
util
.
HashMap
;
import
java.util.Map
;
/**
* @author Grey
* @date 2021年7月13日 下午11:12:15
* @since 1.8
*/
// https://leetcode.cn/problems/two-sum/
@Deprecated
public
class
LeetCode_0001_TwoSum
{
public
int
[]
twoSum
(
int
[]
nums
,
int
target
)
{
Map
<
Integer
,
Integer
>
map
=
new
HashMap
<>(
nums
.
length
);
for
(
int
i
=
0
;
i
<
nums
.
length
;
i
++)
{
if
(
map
.
containsKey
(
target
-
nums
[
i
]))
{
return
new
int
[]{
map
.
get
(
target
-
nums
[
i
]),
i
};
}
map
.
put
(
nums
[
i
],
i
);
}
return
new
int
[]{-
1
,
-
1
};
public
int
[]
twoSum
(
int
[]
nums
,
int
target
)
{
Map
<
Integer
,
Integer
>
map
=
new
HashMap
<>(
nums
.
length
);
for
(
int
i
=
0
;
i
<
nums
.
length
;
i
++)
{
if
(
map
.
containsKey
(
target
-
nums
[
i
]))
{
return
new
int
[]
{
map
.
get
(
target
-
nums
[
i
]),
i
};
}
map
.
put
(
nums
[
i
],
i
);
}
return
new
int
[]
{-
1
,
-
1
};
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录