现给出两个有序整型数组,其中array1按升序(从小到大)排序,array2按降序排序,请你将 array1和array2 合并到一个新的数组中,并保持新中的元素按升序排序。
说明:
给出 array1 和 array2 及其元素数量n 和 m ,返回合并后的新数组。
import java.util.*;
public class Solution {
public int[] arrayMerge (int[] array1, int n, int[] array2, int m) {
// write code here
int [] ans = new int[n + m];
int ixd = 0, i = 0, j = m - 1;
while(j >= 0 && i < n && ixd < n + m){
int num = 0;
if(array1[i] > array2[j]) {
num = array2[j--];
}else{
num = array1[i++];
}
ans[ixd++] = num;
}
while(i < n) ans[ixd++] = array1[i++];
while(j >= 0) ans[ixd++] = array2[j--];
return ans;
}
}
这题的超时都不知道怎么判断的,再快也必须是O(n+m)呀
public int combination (int r, int n) {
if( r>n || r<0 || n<0) return 0;
if( r==n || r == 0 || n == 0) return 1;
if( r == 1) return n;
int[][] dp = new int[n+1][n+1];
for(int i=0; i<n+1; i++) dp[i][0] = 1;
for(int i=1; i<n+1; i++) {
for(int j=1; j<=i; j++) {
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
return dp[n][r];
} public int[] arrayMerge (int[] array1, int n, int[] array2, int m) {
// write code here
int[] res=new int[n+m];
for (int i = 0; i < n; i++) {
res[i]=array1[i];
}
for (int i = n; i < n + m; i++) {
res[i]=array2[i-n];
}
Arrays.sort(res);
return res;
} import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param array1 int整型一维数组
* @param n int整型
* @param array2 int整型一维数组
* @param m int整型
* @return int整型一维数组
*/
public int[] arrayMerge (int[] array1, int n, int[] array2, int m) {
int []arrayFinal=new int[m+n];
int i=0;
int j=m-1;
for(int a=0;a<m+n;a++){
if(i<n && j>=0){
if(array1[i]>array2[j]){
arrayFinal[a]=array2[j];
j--;
}else{
arrayFinal[a]=array1[i];
i++;
}
}else if(i>=n){
arrayFinal[a]=array2[j];
j--;
}else{
arrayFinal[a]=array1[i];
i++;
}
}
return arrayFinal;
}
} 不讲码德法
import java.util.*;
public class Solution {
public int[] arrayMerge (int[] array1, int n, int[] array2, int m) {
// write code here
int[]res=new int[m+n];
int i=0,j=0,k=0;
while(i<n){
res[k++]=array1[i];
i++;
}
while(j<m){
res[k++]=array2[j];
j++;
}
Arrays.sort(res);
return res;
}
} 说好的5秒呢,运行4秒你给我说超时
提交时间:2022-01-17 语言:Java 运行时间: 4001 ms 占用内存:9580K 状态:运行超时
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param array1 int整型一维数组
* @param n int整型
* @param array2 int整型一维数组
* @param m int整型
* @return int整型一维数组
*/
public int[] arrayMerge (int[] array1, int n, int[] array2, int m) {
// write code here
int[] res = new int[m+n];
int i=0;
int j=m-1;
int index=0;
while(i<n && j>=0){
if(array1[i]<array2[j]){
res[index]=array1[i];
i++;
}else{
res[index]=array2[j];
j--;
}
index++;
}
while(i<n){
res[index]=array1[i];
i++;
index++;
}
while(j>=0){
res[index]=array2[j];
j--;
index++;
}
return res;
}
} public int[] arrayMerge (int[] array1, int n, int[] array2, int m) {
// write code here
int[] res=new int[n+m];
int i=0,j=m-1,k=0; //双指针
while(i<n&&j>=0){
if(array1[i]<array2[j]) res[k++]=array1[i++];
else if(array1[i]>array2[j]) res[k++]=array2[j--];
else { res[k++]=array1[i++];res[k++]=array2[j--]; }
}
while (i<n) res[k++]=array1[i++];
while (j>=0) res[k++]=array2[j--];
return res;
} def sort(a, b, m, n):
res = []
index = 0
for i in range(m + n - 1):
a_curr = a[index]
b_curr = b[n - 1]
if a_curr < b_curr:
res.append(a_curr)
if index != m - 1:
index += 1
else:
res.append(b_curr)
n = n-1
return res