35、从有序顺序表中删除所有其值重复的元素,使表中元素不重复
思路
从第二个元素开始遍历数组,len从1开始,如果有相同的元素len就记录相同元素的第二个元素的下标,比较每一个元素和前一个元素,如不相等将当前元素赋值到nums[len],同时len向前移一位,遍历完数组之后len之前的元素都是没有重复的了。
具体实现
public static int removeDuplicateElements(int[] nums) {
int len=1;
for(int i=1;i<nums.length;i++) {
if(nums[i]!=nums[i-1]) {
nums[len]=nums[i];
len++;
}
}
return len;
}
36、将两个有序表合并成一个新的有序表
思路
采用逆向双指针,倒着将nums2中的数和nums1中前m个数逐个比较,将较大者放到nums1后面部分,如果nums2中的数多余m个,则最后再将nums2剩余的数逐个放到nums1剩余位置即可。
具体实现
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=m-1,j=n-1,k=m+n-1;
while(i>=0&&j>=0){
if(nums1[i]>nums2[j]){
nums1[k]=nums1[i];
i--;
}else{
nums1[k]=nums2[j];
j--;
}
k--;
}
while(j>=0){
nums1[k]=nums2[j];
j--;
k--;
}
}