代码随想录 - 数组篇

704. 二分查找

class Solution {
    public int search(int[] nums, int target) {
        int left =0;
        int right = nums.length-1;
        while(left<=right){
            int mid = (left+right)/2;
            if(nums[mid]==target){
                return mid;
            } else if(target<nums[mid]){
                right = mid-1;
            } else if(nums[mid]<target){
                left = mid+1;
            }
        }
        return -1;
    }
}

27. 移除元素

class Solution {
    public int removeElement(int[] nums, int val) {
        int len = nums.length;
        int fast = 0;
        int slow = 0;
        for(;fast<len;fast++){
            if(nums[fast]!=val){
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }
}
class Solution {
    public int removeElement(int[] nums, int val) {
        int len = nums.length;
        int fast = 0;
        int slow = 0;
        while(fast<len){
            if(nums[fast]!=val){
                nums[slow++] = nums[fast];
            }
            fast++;
        }
        return slow;
    }
}

977. 有序数组的平方

class Solution {
    public int[] sortedSquares(int[] nums) {
        int len = nums.length;
        int[] res = new int[len];
        int p = len-1;
        int left = 0;
        int right = len - 1;
        while(left<=right){
            int ll = nums[left] * nums[left];
            int rr = nums[right] * nums[right];
            if(rr>=ll){
                res[p--] = rr;
                right--;
            } else {
                res[p--] = ll;
                left++;
            }
        }
        return res;
    }
}

209. 长度最小的子数组

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int res = Integer.MAX_VALUE;
        int left = 0;
        int right = 0;
        int sum =0;
        for(;right<nums.length;right++){
            sum+=nums[right];
            while(sum>=target){
                res = Math.min(right-left+1,res);
                sum-=nums[left++];
            }
        }
        return res ==Integer.MAX_VALUE? 0 : res;
    }
}

59. 螺旋矩阵 II

class Solution {
    public int[][] generateMatrix(int n) {
        // 答案矩阵
        int[][] res = new int[n][n];
​
        // 要填入的数字
        int number = 1;
​
        // 要循环的圈数(上下左右为一次)
        int loop = n/2;
​
        // 每组开始的时候的上下左右四个指针的位置
        int left =0;
        int right =n-1;
        int top = 0;
        int bottom =n-1;
​
        // 开始循环,每次填充都是左闭右开
        while(loop>0){
            for(int i=left;i<right;i++){
                res[top][i] = number++;
            }
            for(int i=top;i<bottom;i++){
                res[i][right] = number++;
            }
            for(int i=right;i>left;i--){
                res[bottom][i] = number++;
            }
            for(int i=bottom;i>top;i--){
                res[i][left] = number++;
            }
            //指针更新
            top++;
            right--;
            bottom--;
            left++;
​
            //圈数更新
            loop--;
        }
        //如果n是奇数的话,中心点是没有涂上的。要补一下。
        if(loop==0&&n%2==1){
            res[top][left] = number;
        }
        return res;
    }
}

58. 区间和

import java.util.*;
​
public class Main{
    
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        
        int n = in.nextInt();
        int arr[] = new int[n];
        int psum[] = new int[n];
        arr[0] = in.nextInt();
        psum[0] = arr[0];
        for(int i=1;i<n;i++){
            arr[i] = in.nextInt();
            psum[i] = arr[i]+psum[i-1];
        }
        
        while(in.hasNextInt()){
            int left = in.nextInt();
            int right = in.nextInt();
            if(left ==0){
                System.out.println(psum[right]);
            } else {
                System.out.println(psum[right]-psum[left-1]);
            }
        }
        
    }
}

44. 开发商购买土地

import java.util.*;
​
public class Main{
    public static void main(String[] args){
        
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        
        int sum = 0;
        int[][] arr = new int[n][m];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                arr[i][j] = in.nextInt();
                sum+=arr[i][j];
            }
        }
        
        // 统计横向
        int[] hor = new int[n];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                hor[i] +=arr[i][j];
            }
        }
        
        // 统计纵向
        int[] ver = new int[m];
        for(int j=0;j<m;j++){
            for(int i=0;i<n;i++){
                ver[j] +=arr[i][j];
            }
        }
        
        int res = Integer.MAX_VALUE;
        int horCut = 0;
        for(int i=0;i<n;i++){
            horCut +=hor[i];
            res = Math.min(res,Math.abs(sum - 2*horCut));
        }
        
        int verCut = 0;
        for(int j=0;j<m;j++){
            verCut +=ver[j];
            res = Math.min(res,Math.abs(sum - 2*verCut));
        }
        
        System.out.println(res);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值