一、每日一题
88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com)
思路
主要就是利用两个分别指向两个数组的尾部的变量来指定位置,以及一个变量来指定合并好的数组的元素的位置,依次进行大小比较,将较大的元素放进合并好的数组的尾部。其他更细节的地方在代码里面的注释进行了详细的标注。最开始的思路是从头开始遍历两个数组,然后遇到num2比num1数组小的元素就插入,然后num1后面的元素往后移,如果num2中有剩余,那再将num2中剩余的元素放到已经合并好的元素的后面,这样的话还是有些漏洞,只过了一部分样例。
代码
class Solution {
public:
void merge(vector& nums1, int m, vector& nums2, int n) {
int i=m-1,j=n-1;//从尾部开始排起
for(int k=m+n-1;;k--)//从计划已经放好所有元素的数组的尾部开始存放元素,减少了元素的移动带来的麻烦
{
if(i>=0&&j>=0)//当nums1和nums2数组里面都还有元素时
{
if(nums1[i]>=nums2[j])//大的放到后面
{
nums1[k]=nums1[i];
i--;
}
else
{
nums1[k]=nums2[j];
j--;
}
}
else//当有一个数组的元素已经全部进入新的数组时,就跳出循环
{
break;
}
}
while(j>=0)//如果有剩余的元素的话,那一定是nums2的,因为本来就是要把所有元素全部放到nums1,如果是nums1有剩余元素,它就已经排好在nums1数组里了,然后把剩余的元素放进nums1数组
{
nums1[j]=nums2[j];
j--;
}
}
};
过题记录
二、Java学习
•一维数组以及二维数组的初始化以及遍历
public class TwoDimension//一维数组以及二维数组
{
public static void main(String[] args)
{
int c[ ]=new int[3];
for(int i=0;i<3;i++)
{
c[i]=i;
}
for(int i=0;i<3;i++)
System.out.println(c[i]+" ");
int [ ][ ]a1={{1,2},{3,4},{5,6,7}};
for(int i=0;i
•Java中的各种函数
1.排序函数
int[] intArray = new int[] { 4, 1, 3, -23 };
Arrays.sort(intArray);
//输出: [-23, 1, 3, 4]
2.比较数组元素是否相等
int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
System.out.println(Arrays.equals(arr1,arr2));
//输出:true
//如果是arr1.equals(arr2),则返回false,因为equals比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。
3.查找指定元素在数组中的位置(数组必须要按升序排列)
int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,30));
//输出:2 (从0到3位(不包括)找30,找到了,在第2位,返回2)



