d202545
一、合并两个有序数组
思路和合并两个有序链表是一样的
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] left = new int[m];
for(int i = 0;i < left.length;i++){
left[i] = nums1[i];
}
int l = 0;
int r = 0;
int j = 0;
while(l < left.length && r < n){
if(left[l] < nums2[r]){
nums1[j++] = left[l++];
} else {
nums1[j++] = nums2[r++];
}
}
while(l < left.length){
nums1[j++] = left[l++];
}
while(r < n){
nums1[j++] = nums2[r++];
}
}
二、原地移除元素
原地移除指定数,数值划分区间的思想,划分成val 和 非val
public int removeElement(int[] nums, int val) {
int i = -1;
int j = 0;
while(j < nums.length){
if(nums[j] != val){
nums[++i] = nums[j];
} else {
while(j < nums.length && nums[j] == val){
j++;
}
if(j < nums.length){
nums[++i] = nums[j];
}
}
j++;
}
return i+1;
}
三、多数元素
使用map统计一下每个元素出现的次数
public int majorityElement(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int val : nums){
if(map.containsKey(val)){
map.put(val,map.get(val)+1);
}else{
map.put(val,1);
}
if(map.get(val) > (nums.length/2)){
return val;
}
}
return -1;
}