[每日两题系列]刷算法题咯~~

        本系列所选题目均来自力扣或者牛客网站. 所选题目主要是以其中的简单题为主, 中等题为辅, 包含少数困难题(原因是: 本人目前能力还不够~ ). 开展这个系列的目的是督促自己, 在暑假的时间里也要保持有一定的刷题量, 拒绝摆烂~
        话不多说, 直接开刷~~

截断句子

        题目描述: 句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
        例如,“Hello World”、“HELLO” 和 “hello world hello world” 都是句子。
给你一个句子 s​​​​​​ 和一个整数 k​​​​​​ ,请你将 s​​ 截断 ​,​​​使截断后的句子仅含 前 k​​​​​​ 个单词。返回 截断 s​​​​​​ 后得到的句子。

解题思路:
        (1) 本题主要是要截取字符串中的一部分, 那么, 我们就可以先遍历这个字符串, 边遍历边将这些字符存到一个新的字符串里面, 直到遍历到满足条件的时候就停止, 记录下这个位置.
        (2) 下面的代码定义新的字符串类型使用的是StringBuilder类型(这里最好不要使用String类, 代码运行效率会变慢很多, 具体原因可以看看这篇文章: “String、StringBuffer、StringBuilder三者的区别”), 然后就可以使用append方法来往字符串中添加字符. 最后再将StringBuilder类使用toString方法转成String类即可.

实现代码:

class Solution {
    public String truncateSentence(String s, int k) {
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<s.length();i++){
            char ch=s.charAt(i);
            if(ch==' '){
                k--;
            }
            if(k==0){
                break;
            }
            sb.append(ch);
        }
        String str=sb.toString();
        return str;
    }
}

删除有序数组中的重复项

        题目描述: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致
        由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
        将最终结果插入 nums 的前 k 个位置后返回 k 。
        注: 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

解题思路:
        (1) 如若数组长度为零, 则返回0.
        (2) 通过前后指针法, 前指针在前面进行查找, 看看当前值是否与上一个值是相等的, 如若是不相等的, 前后指针一起向后走; 如若是相等的, 则后指针不动, 前指针往后走, 直到不与前面一个的值相等的时候, 就将后指针的下一个值赋为这个值…
        (3) 最后, num里面存的就是后指针走过的那些值, 后指针对应的数值就是修正后数组的长度.

实现代码:

class Solution {
    public int removeDuplicates(int[] nums) {
        int k=nums.length;
        if(k==0){
            return 0;
        }
        int fast=1;
        int slow=1;
        while(fast<k){
            if(nums[fast-1]!=nums[fast]){
                nums[slow]=nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡欣致

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值