给个小弟的题解吧
第一题,我用的深度搜索比较+剪枝,复杂度n~n^2吧,空间O(n)
具体做法,创建一个数据结构,包括矩阵中元素的值,行列坐标,当前已经访问过的节点列表,
然后两层循环,行列坐标不同并且未访问过,就进行相乘并比较最大值,然后将节点添加进已访问列表,其他情况就跳过
具体做法,创建一个数据结构,包括矩阵中元素的值,行列坐标,当前已经访问过的节点列表,
然后两层循环,行列坐标不同并且未访问过,就进行相乘并比较最大值,然后将节点添加进已访问列表,其他情况就跳过
import java.util.*; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); ArrayList<Node> list = new ArrayList<>(); for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) { list.add(new Node(i, j, sc.nextLong())); } } if(n == 1 && n == m) { System.out.println(arr[0][0]); } else { long max = 0; Node n1, n2; for(int i = 0; i < list.size(); ++i) { n1 = list.get(i); for(Node node : list) { n2 = node; if(n1.row != n2.row && n1.col != n2.col && !n1.visited.contains(n2)) { max = Math.max(max, n1.val * n2.val); n1.visited.add(n2); } } } System.out.println(max); } } static class Node { int row, col; long val; ArrayList<Node> visited; public Node(int row, int col, long val) { this.row = row; this.col = col; this.val = val; this.visited = new ArrayList<>(); } } }第二题数组,题目的排序方法没想出来
第三题 二进制中的1
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long num = sc.nextLong(); sc.close(); int ans = 0; while(num > 0) { if((num & 1) == 1) { ++ans; } num >>= 1; } System.out.println(ans); } }第四题,字符串旋转
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String str = sc.nextLine(); sc.close(); int len = str.length(); n = n % len; System.out.println(str.substring(n) + str.substring(0, n)); } }
全部评论
(2) 回帖