首页 > 其他分享 >力扣刷题之数组篇

力扣刷题之数组篇

时间:2023-03-06 10:44:14浏览次数:57  
标签:target nums int 力扣 result 数组 public 刷题

数组篇

1.二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

class Solution {
    public int search(int[] nums, int target) {
        int left=0,right=nums.length-1;
        int mid=0;
        while(left<=right){
            mid=(left+right)/2;
            if(nums[mid]>target) right=mid-1;
            else if(nums[mid]<target) left=mid+1;
            else return mid;
        }
        return -1;
    }
}
//返回位置和插入位置时,最后return left

2.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

class Solution {
    public int removeElement(int[] nums, int val) {
        //定义两个指针,一个不断向前移动,另一个获取到第一个不是val的值后再移动
        int j=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=val){
                nums[j]=nums[i];
                j++;
            }
        }
        return j;
    }
}

3.有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

class Solution {
    public int[] sortedSquares(int[] nums) {
        int l=nums.length;
        for(int i=0;i<l;i++){
            nums[i]=nums[i]*nums[i];
        }
        int []result=new int[l];
        int index=l-1;
        int j=l-1,i=0;
        while(index!=-1){
            if(j==i){//遍历到最后了,结束
                result[index]=nums[i];
                break;
            }
            else if(nums[j]>nums[i]){
                result[index]=nums[j];
                j--;
            }
            else{
                result[index]=nums[i];
                i++;
            }
            index--;
        }
        return result;
    }
}
每个数平方后快排,一次循环找到最小的然后向两边遍历
如果按照更好的办法,当然是找到绝对值最小的,向两边使用双指针法
但是那个找最小的还要遍历,所以可以从两边向中间使用双指针法

4.长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //滑动窗口,这类问题关键在于什么时候向左向右动
        //如果大于目标值,左指针向右移动,如果小于目标值,右指针向右移动
        int i=0,j=0,result=0,l=nums.length;
        Boolean a=true;
        int nowLength=1,nowCount=nums[0];
        while(j<l){
            if(nowCount>=target){//达到要求,保存长度值
                if(a==true) {result=nowLength;a=false;}
                else result=nowLength<result?nowLength:result;
                nowCount=nowCount-nums[j];
                j++;
                nowLength--;
            }
            else{
                if(i<l-1){
                    i++;
                    nowCount=nowCount+nums[i];
                    nowLength++;
                }
                else break;
            }
        }
        return result;
    }
}

5.螺旋数组II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

class Solution {
    public int[][] generateMatrix(int n) {
        int [][]result=new int[n][n];
        int a=1;
        int p=1;
        while(a<=n*n){
            for(int i=p-1;i<=n-p;i++){
                result[p-1][i]=a;a++;
            }
            if(a>n*n) break;
            for(int i=p;i<=n-p;i++){
                result[i][n-p]=a;a++;
            }
            if(a>n*n) break;
            for(int i=n-p-1;i>=p-1;i--){
                result[n-p][i]=a;a++;
            }
            if(a>n*n) break;
            for(int i=n-p-1;i>=p;i--){
                result[i][p-1]=a;a++;
            }
            if(a>n*n) break;
            p++;
        }
        return result;
    }
}

标签:target,nums,int,力扣,result,数组,public,刷题
From: https://www.cnblogs.com/chang-xiaotong/p/17182905.html

相关文章

  • AcWing 4495. 数组操作题解
    思路此题较为简单,简述一下思路。从小到大排序,每次选取最小值,只要不为0即可每次都为序列减去一个数字太慢,但每个数又减去的数字一样,所以可以用minus记录每个数要减去的数......
  • 代码随想录算法训练营Day6 | | 242.有效的字母异位词 ,349. 两个数组的交集 , 202. 快
    前置知识复习哈希表 哈希函数 哈希碰撞拉链法 链法就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多......
  • 算法随想Day30【贪心算法】| LC1005-K次取反后最大化的数组和、LC134-加油站、LC135-
    LC1005.K次取反后最大化的数组和借用评论区的一句话——“普通人思维,无数个ifelse”。voidNegationsLoop(vector<int>&nums,intk,intpos){if(k%2!=0......
  • 稀疏数组
    稀疏数组当一个数组大部分数据为0,或为同一数据时,可用到稀疏数组来保存处理方式:记录数组一共几行几列,有多少个不同值把具有不同值得元素以及行列以及值记录在小规......
  • 力扣---26. 删除有序数组中的重复项
    给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改......
  • vue 中数组值改变但页面未渲染问题
    这里想通过点击按钮打开抽屉,由于抽屉较多,这里我用数组存储了按钮<el-button@click="drawer[index]=true"type="primary"size="small">抽屉<el-dr......
  • 【LeetCode二叉树#19】有序数组转换为二叉搜索树(构造二叉树)
    将有序数组转换为二叉搜索树力扣题目链接(opensnewwindow)将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个......
  • 2023/03/05刷题
    链接A.Domino这个题还是比较有意思的.我们可以统计左边奇数的数量和右边奇数的数量,然后还需要统计一下左边和右边奇偶性不同的个数.(因为这样的一对数才能翻转.)最后综......
  • 浅议柔性数组
    很多时候,柔性数组应用在了变长结构体中,如:StructPacket{Intstate;Intlen;CharcData[0];//这里的0长结构体就为变长结构体提供了非常好的支持};首先对0长数组做......
  • 335-分割数组使乘积互质
    分割数组使乘积互质给你一个长度为n的整数数组nums,下标从0开始。如果在下标i处分割数组,其中0<=i<=n-2,使前i+1个元素的乘积和剩余元素的乘积互质,则......