代码随想录——双指针(一)

简介: 代码随想录——双指针(一)

一.移动零

解法一:模拟

func moveZeroes(nums []int)  {
    n:=len(nums)
    l,r:=0,1
    for r<n&&l<n{
        if nums[r]==0{
            if nums[l]!=0{
                l++
                r++
            }else{
                r++
            }
        }else if nums[l]==0{
            nums[l],nums[r]=nums[r],nums[l]
            l++
            r++
        }else{
            l++
            r++
        }
    }
}

二.双指针

func moveZeroes(nums []int)  {
    n:=len(nums)
    j:=0
    for i:=0;i<n;i++{
        if nums[i]!=0{
            nums[j]=nums[i]
            j+=1
        }
    }
    for i:=j;i<n;i++{
        nums[i]=0
    }
}

二.有序数组的平方

解法一:暴力排序

func sortedSquares(nums []int) []int {
    n:=len(nums)
    for i:=0;i<n;i++{
        nums[i]=nums[i]*nums[i]
    }
    sort.Ints(nums)
    return nums
}

解法二:双指针

func sortedSquares(nums []int) []int {
    n:=len(nums)
    k:=n-1
    res:=make([]int,n)
    l,r:=0,n-1
    for l<=r{
        if nums[l]+nums[r]<0{
            res[k]=nums[l]*nums[l]
            k-=1
            l++
        }else{
            res[k]=nums[r]*nums[r]
            k-=1
            r--
        }
    }
    return res
}


相关文章
|
9月前
|
存储 C语言
函数指针数组:更高效的代码实现方式——指针进阶(二)
函数指针数组:更高效的代码实现方式——指针进阶(二)
35 0
|
9月前
|
小程序 算法
如何降低代码的冗余度(指针的妙用)——探索指针数组,数组指针,函数指针,函数指针数组,回调函数的奥妙
如何降低代码的冗余度(指针的妙用)——探索指针数组,数组指针,函数指针,函数指针数组,回调函数的奥妙
36 0
|
2月前
|
C语言
C语言指针带代码
C语言指针带代码
26 3
|
18天前
|
Go C++
代码随想录——双指针/滑动窗口(二)
代码随想录——双指针/滑动窗口(二)
|
18天前
|
Go C++
代码随想录——双指针与滑动窗口(四)
代码随想录——双指针与滑动窗口(四)
|
18天前
|
Go C++
代码随想录——双指针/滑动窗口(三)
代码随想录——双指针/滑动窗口(三)
|
2月前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
9月前
|
算法
代码随想录刷题-数组双指针
代码随想录刷题-数组双指针
36 0
|
11月前
|
算法 C语言 C++
【双指针问题】LeetCode344、345、 844、283问题详解及代码实现
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
61 0
|
12月前
|
程序员 编译器 C语言
C语言指针理解 --- 代码配合图形讲解内存四区
C语言指针理解 --- 代码配合图形讲解内存四区
58 0