此次挑战的是leetcode面试150题,每天刷三题,争取一小时内结束。
88. 合并两个有序数组
思路直接想到,双指针,从后往前放(避免数组移动),但是没有考虑到nums1结束了, nums2还没结束的情况,需要把nums2接上(不需要接nums2,因为已经接上了)。
最终代码:
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {//双指针int i = m - 1, j = n - 1;int k = m + n - 1;while(i >= 0 && j >= 0){if(nums1[i] > nums2[j]){nums1[k--] = nums1[i--];}else{nums1[k--] = nums2[j--];}}while (j >= 0) {nums1[k--] = nums2[j--];}}
}
python代码:
class Solution(object):def merge(self, nums1, m, nums2, n):""":type nums1: List[int]:type m: int:type nums2: List[int]:type n: int:rtype: None Do not return anything, modify nums1 in-place instead."""i = m - 1j = n - 1k = m + n - 1while i >=0 and j >= 0:if nums1[i] > nums2[j]:nums1[k] = nums1[i]i -= 1else:nums1[k] = nums2[j]j -= 1k -= 1while j >= 0:nums1[k] = nums2[j]j -= 1k -= 1
还是双指针:
class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""j = 0for i in range(len(nums)):if nums[i] != val:nums[j] = nums[i]j += 1return j
还是双指针快慢指针:
class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""j = 0for i in range(1, len(nums)):if nums[i] != nums[j]:j += 1nums[j] = nums[i]return j + 1