首页 > 其他分享 >926打卡

926打卡

时间:2023-10-10 23:13:44浏览次数:40  
标签:divisor nums int needle candidates dividend 打卡 926

1. 删除有序数组中的重复项(26)

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数

思想:双指针

class Solution {
    public int removeDuplicates(int[] nums) {
     if(nums==null||nums.length==0)return 0;
        int i =1;
        int index =1;
        while (i<nums.length){

            if (nums[i]!=nums[i-1]){
                nums[index]=nums[i];
                index++;
            }
            i++;

        }
       
        return  index;
    }
}

2. 移除元素(27)

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

class Solution {
    public int removeElement(int[] nums, int val) {
      int slow =0;
        for (int fast = 0; fast < nums.length; fast++) {
            if(nums[fast]!=val){
                nums[slow]=nums[fast];
                slow++;
            }
        }
        return slow;
    }
}

3. 找出字符串中第一个匹配的字符(28)

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回  -1

思想: KMP 算法,构造前缀,将两个字符拼接,找到前缀长度needle长度的位置

class Solution {
    public int strStr(String haystack, String needle) {
          int n = haystack.length(), m = needle.length();
        if (m == 0) {
            return 0;
        }
        int[] pi = new int[m];
        for (int i = 1, j = 0; i < m; i++) {
            while (j > 0 && needle.charAt(i) != needle.charAt(j)) {
                j = pi[j - 1];
            }
            if (needle.charAt(i) == needle.charAt(j)) {
                j++;
            }
            pi[i] = j;
        }
        for (int i = 0, j = 0; i < n; i++) {
            while (j > 0 && haystack.charAt(i) != needle.charAt(j)) {
                j = pi[j - 1];
            }
            if (haystack.charAt(i) == needle.charAt(j)) {
                j++;
            }
            if (j == m) {
                return i - m + 1;
            }
        }
        return -1;


    }
}

4. 两数相除(29)

给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

返回被除数 dividend 除以除数 divisor 得到的  。

思想: 减法当除法,考虑32位,使用倍增

class Solution {
    public int divide(int dividend, int divisor) {
         // 考虑被除数为最小值的情况
         if(dividend == Integer.MIN_VALUE){
             if(divisor == 1)
             return Integer.MIN_VALUE;
             if (divisor ==-1)
             return Integer.MAX_VALUE;
         }
         // 考虑除数为最小值的情况
         if(divisor == Integer.MIN_VALUE)
         return dividend == Integer.MIN_VALUE? 1:0;
         // 考虑被除数为 0 的情况
         if (dividend==0)
         return 0;
         // 一般情况,使用类二分查找
        // 将所有的正数取相反数,这样就只需要考虑一种情况
        boolean rev = false;
        if(dividend >0){
            dividend = -dividend;
            rev = !rev;
        }
        if(divisor >0){
            divisor = -divisor;
            rev = !rev;
        }

        List<Integer> candidates = new ArrayList<>();
        candidates.add(divisor);

        int index = 0;
        // 注意溢出
        while(candidates.get(index)>=dividend - candidates.get(index)){
            candidates.add(candidates.get(index)+candidates.get(index));
            ++index; //倍增,使得除法变快
        }
        int ans =0;
        for(int i = candidates.size()-1;i>=0;--i){
            //dividend 是负数
            if(candidates.get(i) >= dividend){
                ans+=1<<i;
                dividend -=candidates.get(i);
            }

        }
        return rev? -ans :ans;

    }
}

 

标签:divisor,nums,int,needle,candidates,dividend,打卡,926
From: https://www.cnblogs.com/forever-fate/p/17730323.html

相关文章

  • 20231010打卡
    上午,我学习了顺序存储二叉树数组与链式存储二叉树链表。这是数据结构中非常重要的内容,对于软件工程师来说尤为重要。我仔细学习了二叉树的基本概念、如何使用数组和链表进行存储,以及它们之间的优缺点。我进行了一些实践操作,加深了对二叉树存储方式的理解,并做了一些小练习来巩固所......
  • 每日打卡 周一 十月九日
    今天有java课程了,就是每次都会留下一个很值得思考的编程题,当然今天也不例外,但是今天的题我也是完全没有思路,其中的原因也是自己没有好好去学习,但是我也有很努力的连接数据库,先是数据库mysql的安装与配置,在网上的视频总是不能够完全解决我的问题,跟新的慢,所以都需要花费大量的时间去......
  • 2023.10.9打卡
    2023.10.9今天上了工程实训课,下午上了Java程序设计。在工程实训课上我们学习了自主制作小零件,显示将电子元件安装到电路板上,在根据电路图将线全部焊在一起,然后连接电池使其工作起来,下午Java程序设计课上我们进行了一次测验,很难,很后悔国庆假期没有认真学。......
  • 20231009打卡
    早上,我计划学习手工焊接电路板。作为打卡的第一项任务,我仔细阅读了焊接指南,并准备好所需的工具和材料。我了解到电路板设计和制作的重要性,因为它们是软件工程师日后开发硬件设备所需的基础。我按照指南的步骤进行焊接,将电子元件精确地连接到电路板上。这需要仔细的操作和耐心,但我......
  • 基于Java的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文
    (高校学生综合测评管理系统)三、开发环境与技术3.1MySQL数据库本课题研究研发的应用程序在数据操作过程中是难以预测的,而且常常产生变化。没有办法直接从word里写数据,这不但不安全,并且难以实现应用程序的功能。想要实现运用所需要的数据存放功能,就必定要选择专业的数据库存储软......
  • 大二打卡(9.28)
    今天做了什么:uml课,第三个学期上刘老师的课,第一次能回答他上课提出的问题了,爽。体育课,肺活量吹了6300+,上年就吹了三千多,我还以为自己退步了,估计是上年漏气了,没吹好,差一点就赶上高一吹的6900了,一千米跑,好痛苦,跑完腿没那么累,嗓子眼感觉有东西卡住了,一直咳嗽吐吐沫,难受,大二运动强度......
  • 每日打卡 周三 九月二十七日
    今天又是早八,早上也不是很有精神,上完课就回到宿舍楼,本来是想早上写代码的,但是躺在床上又睡过去了。中午同学叫醒吃饭,我没有去,装备稍微再睡一会,谁知就到下午三点了,肚子有点饿但是懒得动,就等到晚上去吃。所以下午就看代码,首先是三年级的四个数的运算,题目是可以搞出来,但是写完发现答......
  • 大二打卡(9.27)
    今天做了什么:今天的课程只有英语,所以睡了会儿懒觉,结果差点睡过,九点将近一刻才起床,还好没迟到,今天的英语课我发现我的听力水平相对恢复了一点,但是对于单词的记忆模糊了,比如高三的时候讲过的关于custom和customs的区别,我记得多个s是跟海关或者规定啥有关的,结果加个s就是海关的意思,......
  • 20230927打卡
    早晨,我迎着晨光起床,迎接新的一天。心情愉悦,我准备好迎接今天的挑战。在英语课堂上,老师用生动的教学方式让我们沉浸在英语的海洋中。我们学习了词汇的拓展和语法的巩固,通过练习和互动,我逐渐增强了对英语的理解和应用能力。下午的时间里,我投入到了学习中。琐碎的代码和复杂的逻辑,对......
  • 室内团建打卡剧本杀贴牌
      室内团建打卡剧本杀小程序软件的定制开发,也是剧本杀的一种,主要是通过各种的角色,剧情,任务的路线完成游戏,下面是关于该功能的介绍。  一、剧本杀小程序定制的作用  团建打卡剧本杀贴牌功能有助于商家灵活的上传剧本,招客户,分销功能。增加软件的品牌效益,有助于提高商家......