2019/10/30【K个一组翻转链表】&【删除排序数组中的重复项】

题目一:【K个一组翻转链表】力扣——25

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

#!/bin/bash
#K个一组翻转链表
#author:yzt 2019-10-28
#
cat /dev/null > tmp1.txt
echo "$1"|sed 's#->#\n#g' >tmp.txt
read -t 20 -p "请输入节点数:" point
num_1=`cat tmp.txt|wc -l`
declare -i aa=1
point_1=$[$point-1]
for i in `cat tmp.txt`
do
        bb=$[$aa+$point_1]
        sed -n "$aa,$bb p" tmp.txt|tac >>tmp1.txt
        aa=$[$aa+$point]
        if [ $aa -gt $num_1 ];then
                break
        fi
done
str=""
for j in `cat tmp1.txt`
do
        str="$str$j->"
done
echo "$str"|sed 's#->$##'

脚本逻辑:

1、K个一组翻转的关键是如何在字符串中获取K个字符,然后使用翻转语句tac或者rev进行翻转,最后将翻转结果追加到变量中

 

脚本效果:

[root@localhost leetcode]# ./Kgeyizufanzhuanlianbiao "1->2->3->4->5->6->7->8->9"
请输入节点数:3
3->2->1->6->5->4->9->8->7
[root@localhost leetcode]# ./Kgeyizufanzhuanlianbiao "1->2->3->4->5->6->7->8->9"
请输入节点数:4
4->3->2->1->8->7->6->5->9
[root@localhost leetcode]# ./Kgeyizufanzhuanlianbiao "1->2->3->4->5->6->7->8->9"
请输入节点数:5
5->4->3->2->1->9->8->7->6

题目二:【删除排序数组中的重复项】力扣——26

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

你不需要考虑数组中超出新长度后面的元素。
示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

 

#!/bin/bash
#删除排序数组中的重复项
#author:yzt 2019-10-30
#
cat /dev/null >tmp.txt
echo "$1"|sed 's#\[\|\]##g'|sed 's#,#\n#g' >tmp.txt
cat tmp.txt|sort -n|uniq >tmp1.txt
str=""
for i in `cat tmp1.txt`
do
        str=$str$i,
done
str1=`echo "$str"|sed 's#,$##'`
echo "[$str1]"

 脚本逻辑:

1、字符去重即可,需要用到sort和uniq

脚本效果:

[root@localhost leetcode]# ./shanchupaixushuzuzhongdechongfuxiang.sh "[1,1,2,3,4,3,2]"
[1,2,3,4]
[root@localhost leetcode]# ./shanchupaixushuzuzhongdechongfuxiang.sh "[1,1,2,3,4,3,2,5,5]"
[1,2,3,4,5]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值