leetcode數組(一)

1、Remove Element
鏈接:https://leetcode.com/problems/remove-element/
思路:將i,j分別指向頭尾,nums[i] == val 且nums[j] != val, 用j的值覆蓋i處的值

public int removeElement(int[] nums, int val) {
        int len = nums.length, count = 0, i = 0, j = len - 1;
        while(i <= j){
            if(nums[i] == val){
                while(j >= 0 && nums[j] == val)
                    j--;
                if(i < j){
                    nums[i] = nums[j];
                    i++;
                    j--;
                }else
                    return i;
            }else{
                i++;
            }
        }
        return i;
    }

2、Merge Sorted Array
鏈接:https://leetcode.com/problems/merge-sorted-array/
思路:從後面開始移動,減少重複移動

public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1, j = n - 1, count = m + n - 1;
        while(i >= 0 && j >= 0){
            nums1[count--] = nums1[i] >= nums2[j] ? nums1[i--] : nums2[j--];
        }
        while(i >= 0){
            nums1[count--] = nums1[i--];
        }
        while(j >= 0){
            nums1[count--] = nums2[j--];
        }
    }

3、First Missing Positive
鏈接:https://leetcode.com/problems/first-missing-positive/
思路:將1放在0的位置,2放在1的位置,3放在2的位置,以此類推。。。循環找出不在位置上的數字

 public int firstMissingPositive(int[] nums) {
        int i = 0, temp;
        while(i < nums.length){
            if (nums[i] != i + 1 && nums[i] > 0 && nums[i] < nums.length && nums[i] != nums[nums[i] - 1]) {
                temp = nums[i];
                nums[i] = nums[nums[i] - 1];
                nums[temp - 1] = temp;
            } else {
                ++ i;
            }
        }
        for (i = 0; i < nums.length; ++i) {
            if (nums[i] != i + 1) return i + 1;
        }
        return nums.length + 1;
    }

4、Spiral Matrix
鏈接:https://leetcode.com/problems/spiral-matrix/
思路:x1,y1 表示左上角位置;x2,y2表示右下角位置;有利於循環

public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
            return list;
        int lenj = matrix[0].length, leni = matrix.length;
        int x1 = 0, y1 = 0;
        while(leni >= 1 && lenj >= 1){
            int x2 = x1 + leni - 1;
            int y2 = y1 + lenj - 1;
            for(int j = y1; j <= y2; j++){
                list.add(matrix[x1][j]);
            }
            for(int i = x1 + 1; i < x2; i++){
                list.add(matrix[i][y2]);
            }
            if(leni > 1){
                for(int j = y2; j >= y1; j--){
                    list.add(matrix[x2][j]);
                }

            }
            if(lenj > 1){
                for(int i = x2 - 1; i > x1; i--){
                    list.add(matrix[i][y1]);
                }
            }

            leni -= 2;
            lenj -= 2;
            x1++;
            y1++;
        }
        return list;
    }

5、Spiral Matrix II
鏈接:https://leetcode.com/problems/spiral-matrix-ii/
思路:同上題

public int[][] generateMatrix(int n) {
        if(n <= 0)
            return new int[0][0];
        int[][] num = new int[n][n];
        int x1 = 0;
        int temp = n,count = 0;
        while(temp >= 1){
            int x2 = x1 + temp -1 ;
            for(int i = x1; i <= x2; i++)
                num[x1][i] = ++count;
            for(int i = x1 + 1; i <= x2; i++)
                num[i][x2] = ++count;
            if(temp > 1){
                for(int i = x2 - 1; i >= x1; i--)
                    num[x2][i] = ++count;
                for(int i = x2 - 1; i > x1; i--)
                    num[i][x1] = ++count;
            }
            temp -= 2;
            x1++;
        }
        return num;
    }

6、Rotate Image
鏈接:https://leetcode.com/problems/rotate-image/
思路:每次4個數字依次輪換。
這裏寫圖片描述

    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int x = 0, y = 0, temp;
        for(int i = 0; i < n/2; i++)
            for(int j = i; j < n - i - 1; j++){
                temp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
                matrix[j][n - 1 - i] = temp;
            }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章