当前位置: 首页 > news >正文

每日一练:LeeCode-35、搜索插入位置【数组】、面试题 01.08. 零矩阵【数组】、面试题 01.07. 旋转矩阵【数组+行列翻转】

搜索插入位置、零矩阵、旋转矩阵

    • 每日一练:LeeCode-35、搜索插入位置【数组】
      • 方法一(自己写的)
      • 方法二
      • 二分法
    • 每日一练:面试题 01.08. 零矩阵【数组】
    • 每日一练:面试题 01.07. 旋转矩阵【数组+行列翻转】

每日一练:LeeCode-35、搜索插入位置【数组】

LeeCode-35、搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将 会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

提示:

  • 1 <= nums.length <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums无重复元素升序 排列数组
  • -10^4 <= target <= 10^4

方法一(自己写的)

class Solution {
public int searchInsert(int[] nums, int target) {

   int m=0;    //记录是否有相等元素的情况
    //先遍历一遍数组,判断是否有相等的元素,有则返回索引
    for(int i=0;i<nums.length;i++){
        if(nums[i]==target){
            m=i;
            return m;
        }
    }
    if(m==0){
        //target小于nums数组中除最后一个元素之外的元素
        for(int j=0;j<nums.length;j++){

            if(nums[j]>target){
                m=j;//不能解决大于nums[nums.length-1]的情况
                return m;
            }
        }
        //target大于所有数组元素
        if(target>nums[nums.length-1]){
            m=nums.length;
           return m;
        }

    }
return m;
}
}

方法二

class Solution {
    public int searchInsert(int[] nums, int target) {
        for(int i=0;i<nums.length;i++){
        if(nums[i]>=target){return i;}//大于的情况,原本nums[i]的值往后移,所以返回的就是新元素插入的位置
        }
    return nums.length;//target大于任何数,所以新加一个位置,放在最后
    }
}

二分法

class Solution {
    public int searchInsert(int[] nums, int target) {
        // 二分法
        int left = 0, right = nums.length - 1;
        while(left <= right){
            // 防止 left+right 整型溢出
            int mid = left + (right - left) / 2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target){
                left = mid + 1;
            }else if(nums[mid] > target){
                right = mid - 1;
            }
        }
        return left;//如果target找不到,left会一直计算到最接近nums[i]其中一个值附近且找到大于它的下一个位置,所以此时就可以把left作为位置返回了
    }
}

每日一练:面试题 01.08. 零矩阵【数组】

面试题 01.08. 零矩阵

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

思路:
1.获取原数组的行列数
2.新建新数组来保存原数组
3.遍历找到原数组中元素为0的地方,在新数组中,将对应元素的行列设置为0
4.将新数组替换原数组

class Solution {
    public void setZeroes(int[][] matrix) {

        //1.获取原数组的行列数
         int rowRecord =matrix.length;
         int colRecord = matrix[0].length;
         int maxId1 = rowRecord-1;
         int maxId2 =colRecord-1;
         int [][] newMatrix = new int [rowRecord][colRecord];   //新数组作为临时空间

            //2.新建新数组来保存原数组
        for(int x=0;x<rowRecord;x++){
            for(int y=0;y<colRecord;y++){
               newMatrix[x][y] = matrix[x][y];
            }
        }

         //3.遍历找到原数组中元素为0的地方,在新数组中,将对应元素的行列设置为0
        for(int x=0;x<rowRecord;x++){
            for(int y=0;y<colRecord;y++){
               if(matrix[x][y]==0){
                   for(int i=0;i<rowRecord;i++){
                     newMatrix[maxId1-i][y]=0;  
                   }
                   for(int j=0;j<colRecord;j++){
                     newMatrix[x][maxId2-j]=0;  
                   }              
               }
            }
        }
            //4.将新数组替换原数组
        for(int x=0;x<rowRecord;x++){
            for(int y=0;y<colRecord;y++){
               matrix[x][y] = newMatrix[x][y];
            }
        } 

    }
}

每日一练:面试题 01.07. 旋转矩阵【数组+行列翻转】

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?

面试题 01.07. 旋转矩阵

class Solution {
    public void rotate(int[][] matrix) {

        //获取原数组的行数
        int len = matrix.length;
        if(len==1){
          return ;
        }
       //新建NXN矩阵,存放原数组的元素
        int [][] newMatrix = new int[len][len];
        int maxId = len-1;
        for(int x=0;x<len;x++){
            for(int y=0;y<len;y++){
                newMatrix[x][maxId-y] = matrix[y][x];//自己画个矩阵比划一下
            }
        }

       //旋转排序好的新数组替换原数组
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                matrix[i][j] = newMatrix[i][j];
            }
        }
      }
}

相关文章:

  • 【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
  • 5分钟,我把网站性能优化了3倍
  • C++程序设计-第六/七/八章 运算符重载/包含与继承/虚函数和多态性【期末复习|考研复习】
  • 【AI视野·今日NLP 自然语言处理论文速览 第八十三期】Wed, 6 Mar 2024
  • 大语言模型中,role为user、assistant、system有什么区别
  • Django工具
  • 微信小程序如何实现下拉刷新
  • 备战蓝桥杯---动态规划的一些思想2
  • Rust 语言中的泛型
  • 数学建模-敏感度分析(美赛)
  • 学习笔记。。。
  • 【自然语言处理】BitNet b1.58:1bit LLM时代
  • 如何在小程序中绑定身份证
  • 【深圳五兴科技】Java后端面经
  • Spring MVC 全局异常处理器
  • Ajax (1)
  • 支持国密的 Web 服务器
  • 【深度学习笔记】计算机视觉——FCN(全卷积网络
  • 力扣题库第7题:接雨水
  • 01_Maven
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 马斯克的胜利?OpenAI迫于压力放弃营利性转型计划
  • 哈马斯官员:进一步停火谈判毫无意义
  • 山东滕州一车辆撞向公交站台致多人倒地,肇事者被控制,案件已移交刑警
  • 央广网评政府食堂打开大门:小城文旅爆火的底层密码就是真诚
  • 三亚再回应游客骑摩托艇出海遇暴雨:俱乐部未配备足额向导人员,停业整改