zoukankan      html  css  js  c++  java
  • 数组区间操作,数组中重复数相关

    区间合并,区间交集,区间并集等等,数组中一个重复一次,两次相关问题

    区间相关

    • golang 使用Slice便捷排序
    func main()  {
    	arr:=[][]int{{1,2},{1,3},{1,4},{1,5},{1,6}}
    	//排序
    	//第一个参数不是slice则panic
    	sort.Slice(arr,func (i,j int)bool{  //按照第二个元素倒序排列
    		x:=arr[i]
    		y:=arr[j]
    		return x[1]>y[1]
    	})
    	fmt.Println(arr)
    }
    
    56 合并区间

    字节 tencent

    986 区间列表交集

    题目链接

    数组中数的处理

    442 数组中重复的数据

    题目链接

    • 原地hash
      根据数值找指定索引。如果当前索引的值>0则变负。如果<0则证明出现过
    func findDuplicates(nums []int) []int {
        //原地hash
        res:=make([]int,0)
        for i:=0;i<len(nums);i++{
            index:=abs(nums[i])-1  //索引值,防止溢出
            if nums[index]>0{
                nums[index] = -nums[index]
            }else{
                res = append(res,index+1)
            }
        }
        return res
    }
    
    func abs(x int)int{ //自带math.Abs只能处理float64
        if x<0{
            return -x
        }
        return x
    }
    
    278 寻找重复数

    题目链接

    • 原地hash 类似442
    func findDuplicate(nums []int) int {
        //原地hash
    
        for i:=0;i<len(nums);i++{
            index:=abs(nums[i])-1  //索引值,防止溢出
            if nums[index]>0{
                nums[index] = -nums[index]
            }else{
                return index+1
            }
        }
        return 0
    }
    
    func abs(x int)int{ //自带math.Abs只能处理float64
        if x<0{
            return -x
        }
        return x
    }
    

    模拟加减乘除类

    415 字符串相加t
    43 字符串相乘t
    • 特殊方式,找规律,主要是m位n位结果最大m+n位
      然后,i
      j在i+j和i+j+1位置,i+j靠近前面,所以更大,代表进位,最终结果最多开头一位是0
    func multiply(num1 string, num2 string) string {
        if num1=="0"||num2=="0"{
            return "0"
        }
        arr:=make([]int,len(num1)+len(num2)) //最多m+n位
        for i:=len(num1)-1;i>=0;i--{
            m:=int(num1[i]-'0')
            for j:=len(num2)-1;j>=0;j--{
                n:=int(num2[j]-'0')
                tmp:=arr[i+j+1]+m*n 
                arr[i+j+1] = tmp%10//数据已经加过,计算本位的值
                arr[i+j] += tmp/10 //更小则权重更大,因此加上进位
            }
        }
    
        //取出字符串
        res:=""
        for i,v:=range arr{
            if i==0&&v==0{
                continue
            }
            res+=string(v+'0')
        }
        return res
    }
    
  • 相关阅读:
    Beta 冲刺day 6
    Beta冲刺day5
    Beta冲刺day4
    Beta 冲刺day3
    Beta 冲刺day2
    Beta冲刺day1
    Beta预备
    城市安全风险管理项目Postmortem结果
    项目总结
    Alpha冲刺置顶随笔
  • 原文地址:https://www.cnblogs.com/9527s/p/15216879.html
Copyright © 2011-2022 走看看