三元运算符语法补充:

三元运算符的语法是:条件 ? 值1 : 值2

如果条件为true,表达式结果为值1

如果条件为false,表达式结果为值2

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读取数组长度m
        int m = sc.nextInt();
        // 创建长度为m的数组metrix
        int[] metrix = new int[m];
        // 读取数组元素
        for (int i = 0; i < m; i++) {
            metrix[i] = sc.nextInt();
        }
        // 读取需要放置的1的个数n
        int n = sc.nextInt();
        // 记录成功放置的1的个数
        int can = 0;
        // 遍历数组,尝试在为0的位置放置1
        for (int i = 0; i < m; i++) {  // 遍历整个数组
            // 如果当前位置为0
            if(metrix[i] == 0){
                // 确定左邻居的值(如果是边界则为0)
                int left = (i == 0 ? 0 : metrix[i-1]);
                // 确定右邻居的值(如果是边界则为0)
                int right = (i == m - 1) ? 0 : metrix[i + 1];

                // 如果左右邻居都为0
                if (left == 0 && right == 0) {
                    metrix[i] = 1;// 在当前位置放置1
                    can++;// 计数器增加
                    if (can >= n) break;// 如果已经放置了足够的1,就跳出循
                }
            }
        }
        // 输出结果, 如果可以放置的1的个数can>=n,则输出true,否则输出false
        System.out.println( can >= n ? "true" : "false");
        sc.close();
    }
}

int left = (i == 0 ? 0 : metrix[i-1]);

这行代码的目的是获取当前位置i的左邻居的值:

i == 0:判断当前是否在数组的第一个位置(索引为0)

如果i == 0为true(即在第一个位置),那么左边没有元素,所以left = 0

如果i == 0为false(即不在第一个位置),那么左邻居就是metrix[i-1]

举例说明:

当i=0时:left = 0(因为没有左邻居)

当i=1时:left = metrix[0](左邻居是数组第一个元素)

当i=2时:left = metrix[1](左邻居是数组第二个元素)