LeetCode刷题——数组——移除元素

实话实说,刷题当中数组应该是最简单的一类题目,但是目前初期自己码题的时候大体思路是ok的,但是逻辑实现的细节和语法规范问题还是存在问题,话不多说,来看题:

题号26、27

其中26题为移除有序数组的重复项,27题为移除输入数组的给定值的元素,两道题都非常经典。这类题有一种非常有效的方法——双指针法

1.双指针法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。(在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法)

        举例:拿26题来举例,我们可以设置两个指针p和q,p为慢指针,q为快指针。开始时设p=0,q=1;在后续的操作中保持q一直在p的后方,以这样的方式实现一个循环中使用两个指针来实现操作。又拿27题来举例,27题中有两个指针i和j,其中i是慢遍历指针从数组第一个元素开始,而j是从数组最后开始,用于给值为val的nums[i]传值。

代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        int p=0;
        int q=1;
        while(q

        注意事项:在使用双指针法时,一定要注意越界问题即保证指针是有意义的。

2.for循环的妙用

        在使用for循环的时候我们经常强制自己去写满三个语句:即循环变量初始化,判断条件,循环变量自加。但是需要灵活使用循环变量的时候其实写好前两个语句就好。循环体中配合判断语句,可以更好更灵活的进行遍历。

你可能感兴趣的:(leetcode,算法,职场和发展)