编程题思路1

2023-11-14

 

1反转链表

 

2节点两两反转

 

3判断链表是否有环

 

  1  0.5毫秒内是否出现Null

 2  set中查重

 3 快慢指针

4匹配左右括号

 

 

5实时判断第K大的元素

  大顶堆  实时排序

 

6 乱序判断

法一:sort  NlogN

return sorted(s)==sorted(t)

法二:数出现过个个数,用map计数

 

 

 

 

6两数之和 一个数组中两个数相加满足条件

sum==two of array[2,3,4,5]

 

7三数之和

a+b+c==D

 

法一:暴力法  三层循环嵌套

法二:c=-(a+b)   -->放到一个set中

a  b两层循环  每次查询set中 -(a+b) 

法三: sort  find

 

树代码

 

计算x的n次方,递归分治

def  pow(self,x,n):

if  not n:

  return 1

if  n<0:

  return  1/self.pow(x,-n)

if  n%2:

  return x*self.pow(x,n-1)

return self.pow(x*x,n/2)

 

位运算非递归

class mypaw:
    def mypaw(self,x,n):
        if n<0:
            x=1/x
            n=-n
        pow=1
        while n:
            if n&1 :
                pow *=x
            x *=x
            n>>=1
        return pow

 

求众数

排序; 暴力;分治

 

hashtable  同步  不允许NONE的k或v

hashset     基于map上省略value

hashmap   不同步,非线程有更好效率,允许一个none K 或者V

 

 

内排序:在内存中进行排序,不需要磁盘读写,一般假定所有用到的辅助空间也可以直接存在于内存中

外排序:需要磁盘访问,每次读入部分数据到内存进行排序

 

归并排序  merge sort  分治 nlogn  最坏 n**2

快排: quick sort  也是分治  随机选一个轴 再左右两部分 nlogn  平均N   额外空间logn

桶排序  bucket sort   radix sort    k*N

 

1.N皇后问题

N个皇后放在n*n棋盘山  使之不相互攻击

class Nqueen:
    def solveNQueen(self,n):
        if n <1 :return []
        self.result =[]
        self.cols =set();self.pie=set();self.na=set()
        self.DFS(n,0,[])
        return self._generate_result(n)
    def DFS(self,n,row,cur_state):
        if row>=n:
            self.result.append(cur_state)
            return
        for col in range(n):
            if col in self.cols or row+col in self.pie or row-col in self.na:
                continue
            self.cols.add(col)
            self.pie.add(row+col)
            self.na.add(row-col)
            self.DFS(n,row+1,cur_state+[col])
            self.cols.remove(col)
            self.pie.remove(row+col)
            self.na.remove(row-col)

    def _generate_result(self,n):
        board=[]
        for res in self.result:
            for i in res:
                board.append("."*i+"Q"+"."*(n-1-n))
        return [board[i:i+n] for i in range(0,len(board),n)]

 

class NQueen:
    def NQueen(self,n):
        def DFS(queens,pie,na):
            p = len(queens)
            if p==n:
                result.append(queens)
                return None
            for q in range(n):
                if q not in queens and p-q not in pie and p+q not in na:
                    DFS(queens+[q],pie+[p-q],na+[p+q])
        result=[]
        DFS=([],[],[])
        return [ ["."*i+"Q"+"."*(n-i-1) for i in sol] for sol in result  ]

 

2数独问题

9*9格子

行 列 只能1--9不能重复

每个3*3block不能重复

public class shudu {
    public void shudu(char[][] board){
        if (board==null || board.length==0) return;
        solve(board);
    }
    public boolean solve(char[][] board){
        for (int i=0;i<board.length;i++)  for (int j=0;j<board[0].length;j++){
            if (board[i][j]=='.'){
                for (char c='1';c<='9';c++){
                    if (isValid(board,i,j,c)){
                        board[i][j]=c;
                        if(solve(board))
                            return true;
                        else
                            board[i][j]='.';
                    }
                }
                return false;
            }
        }
        return true;
    }
    public boolean isValid(char[][] board,int row,int col,char c){
        for(int i=0;i<9;i++){
            if(board[i][col] !='.' &&board[i][col]==c) return false;
            if(board[row][i] !='.' &&board[row][i]==c) return false;
            if(board[3*(row/3)+i/3][3*(col/3)+i%3] !='.'
            && board[3*(row/3)+i/3][3*(col/3)+i%3] ==c) return false;
        }
        return  true;
    }

}

 

位运算

 

统计1的 个数

def ham(self,n)
    res=0
    mask=1
    for i in range(32):
        if n &mask:
            res +=1
        mask == mask <<1
    return res

C++

int ham(uint32_t n){
int res=0;
for (;n;n&=n-1)
    ++ res;
return resl
}

 

判断是否为2的N次方

bool isA(int n){
    return n>0 && !(n&(n-1));
}

或者

def isA(self,n):
    return n>0 and not (n&n-1)

 

取一个数N,返回这个数0-N之间所有二进制1个数的数组

using namespace std;
vector<int> countBits(int num){
    vector<int> bits(num+1,0); //填充num+1个 默认值为0
    for(int i=1;i<=num;i++){
        bits[i] +=bits[i&(i-1)] +1;
    }
    return bits;
}

 

N皇后问题

class weiNQueen:
    def total(self,n):
        if n<1:return []
        self.count =0
        self.DFS(n,0,0,0,0)
        return self.count
    def DFS(self,n,row,cols,pie,na):
        if row >=n:
            self.count +=1
            return
        bits= (~(cols|pie|na)& ((1<<n)-1))  #得到当前所有空位

        while bits:
            p=bits & -bits  #-bits表示取反加1,~表示只取反,p 取到最低位的1
            self.DFS(n,row+1,cols|p,(pie|p) <<1,(na|p)>>1)
            bits=bits &(bits -1) #去掉最低位的1
A=weiNQueen()
print(A.total(4))

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程题思路1 的相关文章

随机推荐

  • cpustat:在 Linux 下根据运行的进程监控 CPU 使用率

    转自 https linux cn article 8466 1 html pr cpustat 是 Linux 下一个强大的系统性能测量程序 它用 Go 编程语言 1 编写 它通过使用 用于分析任意系统的性能的方法 USE 2 以有效的方
  • Redis学习笔记

    Redis学习笔记 什么是Redis 安装Rides 启动Redis 连接Redis Redis基础知识 五大数据类型 1 String 2 List 3 Set 4 Hash 5 Zset 三种特殊数据类型 1 geospatial 地理
  • 以太坊的MPT树,以及编码,leveldb存储

    声明 此为使用网上多处资料整理而成 由于很多地方内容相同 已经分不清哪里是原创 一 MPT树 1 Trie树 Trie 又称为字典树或者前缀树 prefix tree 属于查找树的一种 它与平衡二叉树的主要不同点包括 每个节点数据所携带的
  • IPP图像处理函数命名格式

    IPP图像处理函数命名格式 专栏目录 说明 一 函数格式 二 data domain 三 Name 1 无修饰符的名称 2 有修饰符的名称 四 数据类型 五 描述符 六 参数 七 拓展 八 函数原型 专栏目录 一 IPP简介及windows
  • Android 初级到高级 进阶

    高级Android学习 Android学习路线指南 singwhatiwanna的博客 CSDN博客
  • ads原理图生成layout_ADS原理图和版图协同优化仿真方法总结

    1 概述 在用ADS进行射频电路仿真时 在原理图层面仿真完毕后 通常还要考虑实际的射频版图布局中传输线的耦合 印制板介质损耗等效应的影响 此时就要在ADS的版图仿真中来实现 在学习ADS时 需要版图仿真时 通常是先原理建模 然后通过生成版图
  • SpringCloud 微服务服务治理注册中心

    一 什么是服务治理 在传统rpc远程调用中 服务与服务依赖关系 管理比较复杂 所以需要使用服务治理 在这里插入图片描述管理服务与服务之间依赖关系 可以实现服务调用 负载均衡 容错等 实现服务发现与注册 二 服务注册与发现 在服务注册与发现中
  • Unity脚本实现——触摸屏3D模型,随单根手指,无死角旋转(Input的GetTouch方法和touchCount属性)

    Unity脚本实现模型360度旋转 参考别人随手指绕Y轴转动 添加了绕X轴转动 using System Collections using System Collections Generic using UnityEngine publ
  • document 使用方法介绍

    document节点是文档的根节点 每张网页都有自己的document节点 属性 1 document doctype 它是一个对象 包含了当前文档类型 Document Type Declaration 简写DTD 信息 2 docume
  • Tessy — 嵌入式软件单元测试/ 集成测试工具

    Tessy 源自戴姆勒 奔驰公司的软件技术实验室 由德国Hitex 公司负责全球销售及技术支持服务 是一款针对嵌入式软件进行单元 集成测试的工具 它可以对C C 代码进行单元 集成测试 可以自动化搭建测试环境 执行测试 评估测试结果并生成测
  • SpringBoot 线程池的使用

    前言 最近在做订单模块 用户购买服务类产品之后 需要进行预约 预约成功之后分别给商家和用户发送提醒短信 考虑发短信耗时的情况所以我想用异步的方法去执行 于是就在网上看见了Spring的 Async了 但是遇到了许多问题 使得 Async无效
  • flutter Flex Wrap Stack Align布局

    1 flex布局 Flex direction Axis horizontal 水平反向 direction不能为空 direction Axis vertical 垂直反向 Expanded flex 1 实现代码如下 child Con
  • C语言-宏定义

    C语言 宏定义 1 宏定义是什么 2 宏定义怎么用 2 1 宏定义常量 2 1 1 预定义宏 2 1 2 自定义宏 2 2 带参数的宏 2 3 编译预处理 3 宏展开 4 编译预处理指令 1 宏定义是什么 宏是用来表示一段代码的标识符 宏也
  • how to unzip split file

    1 how to unzip split file cat zipfile tar gz tar zxv
  • springBoot整合log4j2

    文章目录 什么是log4j2 springBoot依赖的引入 接下来是log4j2的示例配置 首先在application yml制定采用哪个配置文件 在resources目录下新建log4j2 xml文件 什么是log4j2 Apache
  • Linux系统:stress-ng测压工具

    目录 一 理论 1 stress工具简介与安装 2 语法及参数 3 具体安装 二 实验 1 运行8 cpu 4 fork 5 hdd 4 io 50 vm 10小时 2 CPU测试 3 内存测试 4 IO测试 5 磁盘及I O测试 三 问题
  • Java同步代码块详解

    目录 一 什么是内置锁 二 什么是重入 三 活跃性与性能 四 对象的共享 1 可见性 2 非原子的64位操作 3 volatile变量 一 什么是内置锁 Java提供了一种内置的锁机制来支持原子性 同步代码块 同步代码块包含两部分 一个作为
  • SQL,如何更新表结构

    We can alter an existing table structure using the ALTER TABLE command followed by the alteration you want to make 我们可以使
  • 【Unity】[帮助文档] AddForce函数详解,参数ForceMode(Acceleration、Force、Impulse 和 VelocityChange)的选择

    背景 经常忘 经常查 倒不如我自己写一篇给自己方便参考 毕竟每次都在某N站查出来的都是不知道互抄到哪一年的机翻文章 本文涉及代码与测试参考unity版本为2021 3 AddForce 用于对rigidbody组件对象添加力的作用 其参数决
  • 编程题思路1

    1反转链表 2节点两两反转 3判断链表是否有环 1 0 5毫秒内是否出现Null 2 set中查重 3 快慢指针 4匹配左右括号 5实时判断第K大的元素 大顶堆 实时排序 6 乱序判断 法一 sort NlogN return sorted