• Leetcode双指针刷题(一)


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

    不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

    元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    1. public int removeElement(int[] nums, int val) {
    2. int slow=0;
    3. for(int fast=0;fast
    4. if(nums[fast]!=val){
    5. nums[slow]=nums[fast];
    6. slow++;
    7. }
    8. }
    9. return slow;
    10. }

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

    不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

    1. public void reverseString(char[] s) {
    2. int slow=0,fast=s.length-1;
    3. while (slow<=fast){
    4. char temp=s[slow];
    5. s[slow]=s[fast];
    6. s[fast]=temp;
    7. slow++;
    8. fast++;
    9. }
    10. }

    给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

    • 如果剩余字符少于 k 个,则将剩余字符全部反转。
    • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

    示例 1:

    输入:s = "abcdefg", k = 2
    输出:"bacdfeg"
    1. public String reverseStr(String s, int k) {
    2. char[] ch = s.toCharArray();
    3. // 1. 每隔 2k 个字符的前 k 个字符进行反转
    4. for (int i = 0; i< ch.length; i += 2 * k) {
    5. // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
    6. if (i + k <= ch.length) {
    7. reverse(ch, i, i + k -1);
    8. continue;
    9. }
    10. // 3. 剩余字符少于 k 个,则将剩余字符全部反转
    11. reverse(ch, i, ch.length - 1);
    12. }
    13. return new String(ch);
    14. }
    15. // 定义翻转函数
    16. public void reverse(char[] ch, int i, int j) {
    17. for (; i < j; i++, j--) {
    18. char temp = ch[i];
    19. ch[i] = ch[j];
    20. ch[j] = temp;
    21. }
    22. }

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

    考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

    • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
    • 返回 k 。
    1. public int removeDuplicates(int[] nums) {
    2. int slow=0;
    3. for(int fast=0;fast
    4. if(nums[fast]!=nums[slow]){
    5. slow++;
    6. nums[slow]=nums[fast];
    7. }
    8. }
    9. return slow+1;
    10. }

  • 相关阅读:
    如何对需求变更进行精准的风险评估?
    Pixel3系统提取镜像备份并还原到另一台手机
    虚拟机的发展史:从分时系统到容器化
    python安装的第三方库
    蓝桥杯刷题7
    微服务架构改造案例
    【校招VIP】网络基础之cookie、session和storage
    数据化运营09 抓住问题关键:用相关性分析拆解多个影响因素
    复旦EMBA美东国际课程走进哈佛、耶鲁、麻省理工、哥大等顶尖名校
    【一天一点.NET小知识】运用向量Vector<T>加速求和计算
  • 原文地址:https://blog.csdn.net/qq_43649937/article/details/138160312