提交 f159bcb9 编写于 作者: L liu13

20190704

上级 34e359cf
package code;
/*
* 153. Find Minimum in Rotated Sorted Array
* 题意:反转数组找最小值
* 难度:Medium
* 分类:Array, Binary Search
* 思路:
* Tips:边界条件想清楚
*/
public class lc153 {
public int findMin(int[] nums) {
int left = 0;
int right = nums.length-1;
while(left<right){
int mid = (left+right)/2;
if(nums[left]<nums[mid]){ //左边有序
if(nums[left]<nums[right]){ //在左边找
right = mid-1;
}else{
left = mid;
}
}else{ //右边有序
if(nums[right]<nums[mid]){ //边界条件想清楚
left = mid+1;
}else{
right = mid;
}
}
}
return nums[left];
}
}
......@@ -6,6 +6,8 @@ package code;
* 分类:Divide and Conquer, Heap
* 思路:快排的思想
* Tips:经典的题目,记一下代码格式,方便快速写出
* 两个点 1.降序排序 2.注意等号。 相比快排,省略了首行判断返回 和 交换
* lc912
*/
public class lc215 {
public static void main(String[] args) {
......@@ -21,10 +23,10 @@ public class lc215 {
int origin_r = right;
int cur = nums[left];
while(left<right) {
while (left<right && nums[right] < cur)
while (left<right && nums[right] < cur) //降序排序,方便处理
right--;
nums[left] = nums[right];
while (left<right && nums[left] >= cur)
while (left<right && nums[left] >= cur) //注意要加个=号,上个while加也行,防止重复数字死循环
left++;
nums[right] = nums[left];
}
......
package code;
/*
* 912. Sort an Array
* 题意:数组排序
* 难度:Medium
* 分类:
* 思路:
* Tips:注意和lc215区别
* lc215
*/
public class lc912 {
public static void main(String[] args) {
int[] arr = sortArray2(new int[]{5,2,3,1});
for(int i: arr){
System.out.println(i);
}
}
// 快排
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length-1);
return nums;
}
public void quickSort(int[] nums, int left, int right){
if(left>=right) return; //注意返回
int l = left;
int r = right;
int pivot = nums[left];
while(left<right){
while(left<right && nums[right]>=pivot) right--;
int temp = nums[right]; nums[right] = nums[left]; nums[left]=temp; //交换
while(left<right && nums[left]<pivot ) left++;
temp = nums[right]; nums[right] = nums[left]; nums[left]=temp;
}
nums[left] = pivot;
quickSort(nums, left+1, r);
quickSort(nums, l, right-1);
}
// 归并
public static int[] sortArray2(int[] nums) {
mergeSort(nums, 0, nums.length-1);
return nums;
}
public static void mergeSort(int[] nums, int left, int right){
if(left<right) {
int mid = (left+right)/2;
mergeSort(nums, left, mid);
mergeSort(nums, mid+1, right);
merge(nums, left, mid, right);
}
}
public static void merge(int[] nums, int left, int mid, int right){
int[] temp = nums.clone(); //记住这个方法
int cur = left;
int pos1 = left;
int pos2 = mid+1;
while(pos1<=mid && pos2<=right){
if(temp[pos1]<temp[pos2]) { //注意是temp 复制后的
nums[cur] = temp[pos1];
pos1++;
cur++;
}
else {
nums[cur] = temp[pos2];
pos2++;
cur++;
}
}
while(pos1<=mid){
nums[cur] = temp[pos1];
pos1++;
cur++;
}
while(pos2<=right){
nums[cur] = temp[pos2];
pos2++;
cur++;
}
}
}
......@@ -236,3 +236,5 @@ LeetCode 指南
| 1026 [Java](./code/lc1026.java)
| 1027 [Java](./code/lc1027.java)
| 1028 [Java](./code/lc1028.java)
| 1093 [Java](./code/lc1093.java)
| 1094 [Java](./code/lc1094.java)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册