寻找两个正序数组的中位数
This commit is contained in:
parent
2eb67310dd
commit
528f46b646
23
.classpath
23
.classpath
|
@ -13,11 +13,32 @@
|
||||||
<attribute name="test" value="true"/>
|
<attribute name="test" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" path="target/generated-sources/annotations">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="ignore_optional_problems" value="true"/>
|
||||||
|
<attribute name="m2e-apt" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
<attribute name="ignore_optional_problems" value="true"/>
|
||||||
|
<attribute name="m2e-apt" value="true"/>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
<classpathentry kind="output" path="target/classes"/>
|
<classpathentry kind="output" path="target/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
11
.project
11
.project
|
@ -20,4 +20,15 @@
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
|
<filteredResources>
|
||||||
|
<filter>
|
||||||
|
<id>1605433362927</id>
|
||||||
|
<name></name>
|
||||||
|
<type>30</type>
|
||||||
|
<matcher>
|
||||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
||||||
|
<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
||||||
|
</matcher>
|
||||||
|
</filter>
|
||||||
|
</filteredResources>
|
||||||
</projectDescription>
|
</projectDescription>
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.apt.aptEnabled=false
|
|
@ -11,5 +11,6 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.processAnnotations=disabled
|
||||||
org.eclipse.jdt.core.compiler.release=disabled
|
org.eclipse.jdt.core.compiler.release=disabled
|
||||||
org.eclipse.jdt.core.compiler.source=1.8
|
org.eclipse.jdt.core.compiler.source=1.8
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
日常刷lintCode算法,提高自己的编码能力.
|
日常刷lintCode算法,提高自己的编码能力.
|
||||||
|
|
||||||
- [字符串相关](./src/string)
|
- [字符串相关](./src/main/java/com/leetcode/string)
|
||||||
- [list相关](./src.list)
|
- [list相关](./src/main/java/com/leetcode/list)
|
||||||
- [简单算法](./src/simple)
|
- [简单算法](./src/main/java/com/leetcode/simple)
|
||||||
- [九章算法](./src/jiuzhang)
|
- [九章算法](./src/main/java/com/leetcode/jiuizhang)
|
||||||
|
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
## 题目描述
|
|
||||||
|
|
||||||
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
|
|
||||||
|
|
||||||
注意:答案中不可以包含重复的三元组。
|
|
||||||
|
|
||||||
示例:
|
|
||||||
|
|
||||||
给定数组 nums = [-1, 0, 1, 2, -1, -4],
|
|
||||||
|
|
||||||
满足要求的三元组集合为:
|
|
||||||
```
|
|
||||||
[
|
|
||||||
[-1, 0, 1],
|
|
||||||
[-1, -1, 2]
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
## 解题思路
|
|
||||||
![2020-01-19_21-44.png](https://img.zeekling.cn/images/2020/01/19/2020-01-19_21-44.png)
|
|
||||||
|
|
||||||
## 答案
|
|
||||||
|
|
||||||
```java
|
|
||||||
class Solution {
|
|
||||||
public List<List<Integer>> threeSum(int[] nums) {
|
|
||||||
List<List<Integer>> res = new ArrayList<>();
|
|
||||||
Arrays.sort(nums);
|
|
||||||
int min=0,mid=1, max=nums.length-1, s= 0;
|
|
||||||
while(nums.length >= 3 && min < nums.length && nums[min] <= 0){
|
|
||||||
mid = min + 1;
|
|
||||||
max = nums.length-1;
|
|
||||||
if(min > 0 && nums[min] == nums[min -1]){
|
|
||||||
min ++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
while(mid < max){
|
|
||||||
s = nums[min] + nums[mid] + nums[max];
|
|
||||||
if (s < 0){
|
|
||||||
mid ++;
|
|
||||||
}else if(s > 0){
|
|
||||||
max --;
|
|
||||||
}else if (s == 0){
|
|
||||||
res.add(Arrays.asList(nums[min],nums[mid], nums[max]));
|
|
||||||
while(mid < max && nums[mid] == nums[mid + 1]){
|
|
||||||
mid ++;
|
|
||||||
}
|
|
||||||
while(mid< max && nums[max] == nums[max-1]){
|
|
||||||
max --;
|
|
||||||
}
|
|
||||||
mid ++;
|
|
||||||
max --;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
min++;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
|
@ -18,7 +18,7 @@ public class PlusAB {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args){
|
public static void main(String[] args) {
|
||||||
PlusAB ab = new PlusAB();
|
PlusAB ab = new PlusAB();
|
||||||
System.out.println(ab.plus(1,3));
|
System.out.println(ab.plus(1,3));
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package com.leetcode.list;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
|
||||||
|
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
|
||||||
|
|
||||||
|
示例 1:
|
||||||
|
|
||||||
|
输入:nums1 = [1,3], nums2 = [2]
|
||||||
|
输出:2.00000
|
||||||
|
解释:合并数组 = [1,2,3] ,中位数 2
|
||||||
|
示例 2:
|
||||||
|
|
||||||
|
输入:nums1 = [1,2], nums2 = [3,4]
|
||||||
|
输出:2.50000
|
||||||
|
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
|
||||||
|
示例 3:
|
||||||
|
|
||||||
|
输入:nums1 = [0,0], nums2 = [0,0]
|
||||||
|
输出:0.00000
|
||||||
|
示例 4:
|
||||||
|
|
||||||
|
输入:nums1 = [], nums2 = [1]
|
||||||
|
输出:1.00000
|
||||||
|
示例 5:
|
||||||
|
|
||||||
|
输入:nums1 = [2], nums2 = []
|
||||||
|
输出:2.00000
|
||||||
|
题库位置:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
|
||||||
|
|
||||||
|
*
|
||||||
|
* @author zeekling
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FindMedianSortedArrays {
|
||||||
|
|
||||||
|
public double median(int[] nums1, int[] nums2) {
|
||||||
|
int all = nums1.length + nums2.length;
|
||||||
|
int mi = 0,ni = 0, curr = 0, pre = 0;
|
||||||
|
for ( int i = 0;i < all;i++ ) {
|
||||||
|
pre = curr;
|
||||||
|
if (mi < nums1.length && ni >= nums2.length ){
|
||||||
|
curr = nums1[mi++];
|
||||||
|
}else if (mi >= nums1.length && ni < nums2.length) {
|
||||||
|
curr = nums2[ni++];
|
||||||
|
}else {
|
||||||
|
curr = nums1[mi] < nums2[ni] ? nums1[mi++] : nums2[ni++];
|
||||||
|
}
|
||||||
|
if (i*2 == all ){
|
||||||
|
return ((double)curr + (double)pre)/2;
|
||||||
|
}
|
||||||
|
if ((i+1)*2 > all) {
|
||||||
|
return curr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
FindMedianSortedArrays median = new FindMedianSortedArrays();
|
||||||
|
int[] nums1 = {2}, nums2 = {};
|
||||||
|
double res = median.median(nums1, nums2);
|
||||||
|
DecimalFormat format = new DecimalFormat("#.00000");
|
||||||
|
System.out.println(format.format(res));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -17,9 +17,8 @@ public class PivotIndex {
|
||||||
for (int i=0; i< len;i++){
|
for (int i=0; i< len;i++){
|
||||||
sum += nums[i];
|
sum += nums[i];
|
||||||
}
|
}
|
||||||
int idx = -1;
|
|
||||||
int leftSum = 0;
|
int leftSum = 0;
|
||||||
for (int i=0;i<len;i++){
|
for (int i = 0;i < len;i ++){
|
||||||
|
|
||||||
if ((leftSum * 2 + nums[i]) == sum){
|
if ((leftSum * 2 + nums[i]) == sum){
|
||||||
return i;
|
return i;
|
||||||
|
|
|
@ -11,7 +11,8 @@ package com.leetcode.num;
|
||||||
public class SumNums{
|
public class SumNums{
|
||||||
|
|
||||||
public int sumNums(int n) {
|
public int sumNums(int n) {
|
||||||
boolean res = n > 0 && (n += sumNums(n-1)) > 0;
|
@SuppressWarnings("unused")
|
||||||
|
boolean res = n > 0 && (n += sumNums(n-1)) > 0;
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue