前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『LeetCode』#6刷题日记

『LeetCode』#6刷题日记

作者头像
客怎眠qvq
发布2022-11-01 16:21:08
2080
发布2022-11-01 16:21:08
举报
文章被收录于专栏:某菜鸟の小屋

前言 📢

本日记为个人的刷题学习日记,内容非原创,仅为自己复习知识时,能够看得懂自己写的CV的代码,快速理解题意。另外,👍力扣官方的题解很好用,三叶姐🍭nb!!!!!

448 找到数组中消失的数字📝

题意

  • 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
  • 输入: nums = [4, 3, 2, 7, 8, 2, 3, 1] 输出: [5, 6]

思路

  • 暴力统计已有的数字,再遍历数组,输出未统计的数字
代码语言:javascript
复制
class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        int len = nums.length;
        // 数组中 每个数字的值 作为已出现数字的索引 无论出现多少次 均记为1
        int[] newNums = new int[len+1];
        for(int i=0; i<len; i++) {
            newNums[nums[i]] = 1;
        }
		// 新建列表 遍历用于统计的数组 输出出现次数为0的索引值
        List<Integer> list = new ArrayList<>();
        for(int i=1; i<len+1; i++) {
            if(newNums[i] == 0) {
                list.add(i);
            }
        }
        return list;
    }
}

  • 排序、验证递增关系。若数字均出现,则为单调递增的序列,即[1, 2, 3, ,4, 5, …]
  • 只遍历了一遍数组,也没有新建任何其他项,只要要求返回的list
代码语言:javascript
复制
class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
		// 首、尾、中间段 均要考虑 就是时间变得好长
        List<Integer> list = new ArrayList<>();
        int start = 1, end = len;
        // [4, 4, 4, 4]
        if(nums[0] != 1) {
            while(start < nums[0]) {
                list.add(start);
                start++;
            }
        }
        // [1, 1, 1, 1]
        if(nums[len - 1] < len) {
            while(nums[len-1] < end) {
                list.add(end);
                end--;
            }
        }

        // [1, 2, 2, 2, 4, 6]
        for(int i=1; i<len; i++) {
            if(nums[i] == nums[i-1] || nums[i] == nums[i-1] + 1) {
                continue;
            } else {
                while(nums[i-1] + 1 < nums[i]) {
                    list.add(nums[i-1] + 1);
                    nums[i-1]++;
                }
            }
        }
        return list;
    }
}

179 最大数📝

题意

  • 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
  • 输出结果可能非常大,所以你需要返回一个字符串而不是整数。 return String

思路

  • 贪心、字符串拼接
代码语言:javascript
复制
class Solution {
    public String largestNumber(int[] nums) {
        int len = nums.length;
        String[] str = new String[len];
        // 转换为字符串数组
        for(int i=0; i<len; i++) {
            str[i] = "" + nums[i];
        }
        // 比较两个字符串拼接后的大小排序 a + b和 b + a
        Arrays.sort(str, (a, b) -> {
            String sa = a + b, sb = b + a;
            return sb.compareTo(sa);
        });
        // StringBUilder拼接 会更快
        StringBuilder sb = new StringBuilder();
        for(String aStr : str) {
            sb.append(aStr);
        }
        int len2 = sb.length();
        int k = 0;
        // 注意 避免 零开头项
        while(k < len - 1 && sb.charAt(k) == '0') k++;
        return sb.substring(k);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言 📢
  • 448 找到数组中消失的数字📝
    • 题意
      • 思路
      • 179 最大数📝
        • 题意
          • 思路
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档