现给出两个有序整型数组,其中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