欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > <02.25>Leetcode100

<02.25>Leetcode100

2025/2/26 17:37:18 来源:https://blog.csdn.net/Shuzi_master7/article/details/145854599  浏览:    关键词:<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 {//快读1BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//快读2StreamTokenizer 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 {//快读1BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//快读2StreamTokenizer 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;}
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词