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

<02.25>Leetcode100

 

 

package Java_Input;

import java.io.*;
import java.util.*;
import java.text.*;
public class demo01 {
    public static void main(String[] args) throws IOException {
        //快读1
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //快读2
        StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
        //快写
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
        
        st.nextToken();
        int m = (int) st.nval;
        st.nextToken();
        int n = (int) st.nval;
        int[][] arr = new int[m][n];
        for(int i=0;i<m;i++) {
        	for(int j=0;j<n;j++) {
        		st.nextToken();
        		arr[i][j] = (int) st.nval;
        	}
        }
        List<Integer> ans =new ArrayList<>();
        if(arr.length == 0)pw.println(ans);
        int l = 0, r = arr[0].length - 1, t = 0, b = arr.length - 1;
        while(true) {
        	for(int i=l;i<=r;i++)ans.add(arr[t][i]);//从左向右遍历
        	if(++t>b)break;//等于的时候是最后一行
        	for(int i=t;i<=b;i++)ans.add(arr[i][r]);//从上往下遍历
        	if(l>--r)break;
        	for(int i=r;i>=l;i--)ans.add(arr[b][i]);//从右向左遍历
        	if(t>--b)break;
        	for(int i=b;i>=t;i--)ans.add(arr[i][l]);//从下往上遍历
        	if(++l>r)break;
        }
        pw.println(ans);
      	//一定要记得关流
        pw.close();
        br.close();
	}
}

 

 

 


    public static void main(String[] args) throws IOException {
        //快读1
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //快读2
        StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
        //快写
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
        
        st.nextToken();
        int n = (int) st.nval;
        int[][] arr = new int[n][n];
        for(int i=0;i<n;i++) {
        	for(int j=0;j<n;j++) {
        		st.nextToken();
        		arr[i][j] = (int) st.nval;
        	}
        }
        for(int i=0;i<n/2;i++) {
        	for(int j=0;j<(n+1)/2;j++){
        		int temp = arr[i][j];
        		arr[i][j] = arr[n-1-j][i];
        		arr[n-1-j][i] = arr[n-1-i][n-1-j];
        		arr[n-1-i][n-1-j] = arr[j][n-1-i];
        		arr[j][n-1-i] = temp;
        		
        	}
        }
      	//一定要记得关流
        for(int i=0;i<n;i++)for(int j=0;j<n;j++)pw.print(arr[i][j]);
        pw.close();
        br.close();
	}

 行交换 并且对称 能实现顺时针90度 列交换并对称 能实现逆时针90度

class Solution {
   public void rotate(int[][] matrix){
        for(int i=0;i<matrix.length/2;i++){
            int[] temp =  matrix[i];
            matrix[i]=matrix[matrix.length-i-1];
            matrix[matrix.length-i-1]=temp;
        }

        for(int i=0;i<matrix.length;i++) {
            for (int j = 0; j < i; j++) {
                int temp=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
        }
    }
}

二分模板一共有两个,分别适用于不同情况。
算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

C++ 代码模板:
int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    return l;
}
版本2
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

C++ 代码模板:
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

o表示true ,表示false 而v本身也要是true

如果我们的目标是下面这个v,那麽就必须使用模板 1

................vooooooooo

假设经由 check 划分后,整个区间的属性与目标v如下,则我们必须使用模板 2

oooooooov...................

所以下次可以观察 check 属性再与模板1 or 2 互相搭配就不会写错啦

左加右减 减需要还 

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length, n = matrix[0].length;
        for (int i = 0; i < m; i++) {
            int l = 0, r = n - 1;
            while (l < r) {
                int mid = l + r + 1 >> 1;
                if (matrix[i][mid] <= target) l = mid;
                else r = mid - 1;
            }
            if (matrix[i][r] == target) return true;
        }
        return false;
    }
}

 

 

 

 

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {//m行n列
        int m = matrix.length;
        int n= matrix[0].length;
        int i=0,j=n-1;
        while(i<=m-1&&j>=0){
            int temp = matrix[i][j];
            if(target>temp)i++;
            else if(target<temp)j--;
            else return true;
        }
        return false;
    }
}

 


http://www.kler.cn/a/561795.html

相关文章:

  • DeepSeek-R1技术全解析:如何以十分之一成本实现OpenAI级性能?
  • 全方位监控AWS Application Load Balancer异常情况实战
  • 基于GO语言的车牌识别api技术-港澳车牌文字识别
  • 微软开源神器OmniParser-v2.0本地部署教程
  • git | 团队协作开发注意事项
  • 【Blender】三、材质篇--01,Blender材质基础 原理化BSDF
  • 大模型输出markdown格式前端对话框
  • 深入理解C++ 线程池:动手实践与源码解析
  • 是德科技keysight N5173B信号发生器,是一款经济高效的仪器
  • Java多线程中的死锁问题
  • Docker 部署 Jenkins持续集成(CI)工具
  • Java23种设计模式案例
  • smolagents学习笔记系列(五)Tools-in-depth-guide
  • 804 唯一摩斯密码词
  • 【leetcode hot 100 1】两数之和
  • 钉钉合同审批对接腾讯电子签,实现合同全流程自动化管理
  • 【删边问题——Tarjan求割边】
  • 宿主机的 root 是否等于 Docker 容器的 root?
  • Ajax数据采集与分析详解
  • 开源分布式存储系统在云原生数据库领域的实践与应用