河南制作网站公司,域名注册商标,为啥都用wordpress,王也手机壁纸题目#xff1a; 88. 合并两个有序数组 思路#xff1a; 最开始想到的就是使用一个中间数组来存放合并后的数据#xff0c;对两个数组使用双指针进行遍历#xff0c;将两个数组中较小的放入中间数据。 看了题解#xff0c;发现可以逆序进行遍历#xff0c;因为nums1中后…题目 88. 合并两个有序数组 思路 最开始想到的就是使用一个中间数组来存放合并后的数据对两个数组使用双指针进行遍历将两个数组中较小的放入中间数据。 看了题解发现可以逆序进行遍历因为nums1中后面几位是0, 可以进行覆盖选择两个数组中较大值放入nums1后面节省了中间数组的空间。 代码
// 顺序双指针
public void merge(int[] nums1, int m, int[] nums2, int n) {int[] result new int[mn];int i 0;int j 0;for(int x 0; x mn-1; x ){// 添加nums1中的元素的条件: 1nums1中的数据没有遍历完// 2并且nums2中的数据已经遍历完了 或者 nums1中的数据nums2中的数据if(i m-1 (j n || nums1[i] nums2[j])){result[x] nums1[i];i;}else{result[x] nums2[j];j;}}// 将中间数组的结果给nums1数组int index 0;for (int i1 : result) {nums1[index] i1;}}// 逆序双指针
public void merge(int[] nums1, int m, int[] nums2, int n) {// int[] result new int[mn];int i m-1;int j n-1;for(int x mn-1; x 0; x--){// 与顺序双指针类似if(i 0 (j 0 || nums1[i] nums2[j])){nums1[x] nums1[i];i--;}else{nums1[x] nums2[j];j--;}}}
Tips JAVA对数组进行排序Arrays.sort(nums1) Collections.sort(List)是对List进行排序 题目 26. 删除有序数组中的重复项 思路 1使用一个List来记录数组中的元素情况类似一个set 使用.contains()进行处理然后将这个list中的数据覆盖到原数组中 2使用双指针slow指针指向下一个不重复元素所放下标fast指针指向不重复元素的下标。如果muns[fast]!nums[fast-1] 表明当前下标的元素就是不重复的 代码
public int removeDuplicates(int[] nums) {// 统计数组中的元素ListInteger a new ArrayList();for (int i : nums) {if(!a.contains(i)){a.add(i);}}int j 0;int len a.size();for(int i0; j len; i){nums[i] a.get(j);}return len;}// 双指针
public int removeDuplicates(int[] nums) {if(nums null){return 0;}if(nums.length 1){return 1;}int fast 1;int slow 1;for(; fast nums.length; fast ){if(nums[fast] ! nums[fast-1]){nums[slow] nums[fast];slow ;}}return slow;}