IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 6. Z 字形变换 / 75. 颜色分类 -> 正文阅读

[人工智能]6. Z 字形变换 / 75. 颜色分类

6. Z 字形变换【中等题】【每日一题】

思路:【找规律】

  1. 每一行开头的字符均为s中对应行号位置的字符,即,第i行的首字母对应s中第i个位置。
  2. 以每一个竖直向下的列分隔,那么每一行的奇数列与偶数列之间的字符对应s中的下标存在如下对应关系:
  3. 设周期为t=2*numRows-2,每两个相邻字符之间,
  4. 第1行,t
  5. 第2行,t-2,2
  6. 第3行,t-4,4
  7. 第倒数第3行,4,t-4
  8. 第倒数第2行,2,t-2
  9. 第倒数第1行,t 。

综上规律,定义中间行号mid=(numRows-1)/2,遍历每一行,定义j表示当前行的起始下标,初值为i。
首行或者尾行,依次添加s中所有的j+t位置字符,并更新j=j+t
其他行,判断是前一半还是后一半,前一半依次先添加j+(t-2i),j+(2i),并实时更新j;后一半依次添加j+(2i),j+t-(2i),并实时更新j。

代码:

class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1){
            return s;
        }
        int t = 2*numRows-2,mid = (numRows-1)/2,len = s.length();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < numRows; i++) {
            int j = i;
            if (i == 0 || i == numRows-1){
                while (j<len){
                    sb.append(s.charAt(j));
                    j += t;
                }
            }else {
                if (i<=mid){
                    while (j<len){
                        sb.append(s.charAt(j));
                        j+=(t-2*i);
                        if (j<len && j>=numRows){
                            sb.append(s.charAt(j));
                        }
                        j+=2*i;
                    }
                }else {
                    while (j<len){
                        sb.append(s.charAt(j));
                        j+=2*(numRows-1-i);
                        if (j<len && j>=numRows){
                            sb.append(s.charAt(j));
                        }
                        j+=(t-2*(numRows-1-i));
                    }
                }
            }
        }
        return sb.toString();
    }
}

75. 颜色分类【中等题】

思路:【计数排序】

  1. 因为数组里只有3个数,所以一次遍历统计0,1,2三个数的个数。
  2. 设0,1,2三个数的个数分别为n0,n1,n2的个数。
  3. 数组下标0~n0-1设置为0。
  4. 下标n1~n2-1设置为 1。
  5. 下标n2往后设为2。
  6. 排序完毕。

代码:

class Solution {
    public void sortColors(int[] nums) {
        int[] cnt = new int[3];
        for (int num : nums) {
            cnt[num]++;
        }
        for (int i = 0; i < cnt[0]; i++) {
            nums[i] = 0;
        }
        for (int i = 0; i < cnt[1]; i++) {
            nums[cnt[0]+i] = 1;
        }
        for (int i = 0; i < cnt[2]; i++) {
           nums[cnt[0]+cnt[1]+i] = 2;
        }
    }
}

用时:

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:13:20  更:2022-03-03 16:19:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:39:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码