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;
            }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值