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

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

一.移动零

解法一:模拟

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
}


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