目录

22-01-07 二分查找

22-01-10 二叉树的层序遍历

22-01-14最长无重复子数组


22-01-07 二分查找

请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1

function search($nums, $tag)
{if (empty($nums)) {return -1;}$end = count($nums) - 1;$str = 0;while ($str <= $end) {$mid = floor(($str + $end) / 2);if ($nums[$mid] == $tag) {while ($mid >= 1 && $nums[$mid] == $nums[$mid - 1]) {$mid -= 1;}return $mid;}if ($nums[$mid] < $tag) {$str = $mid + 1;} else {$end = $mid;}sleep(1);}return -1;
}$nums = [1, 2, 3, 4, 4, 5, 6, 7, 7, 9, 99];
echo search($nums, 7);
package mainimport "fmt"func search(nums []int ,target int ) int {l := 0r := len(nums) - 1for ; l <= r; {mid := (r+l) / 2if nums[mid] == target {return findMin(nums,target ,l ,mid)} else if nums[mid] > target {r = mid -1} else {l = mid+1}}return -1
}func findMin(nums []int ,target int ,l int , r int)  int{for ; l <= r; {mid := (r+l) / 2if nums[mid] < target {l = mid +1} else {r = mid -1}}return -1
}func main() {nums := [11]int{1, 2, 3, 4, 4, 5, 6, 7, 7, 9, 99}fmt.Println(nums)i := search(nums[:], 7)fmt.Println(i)
}

22-01-10 二叉树的层序遍历

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},

该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]

]

<?phpfunction levelOrder($root)
{$result = [];if (!$root) {return $result;}$stack = [$root];while (count($stack) > 0) {$size = count($stack);$i = 0;$tt = [];while ($i < $size) {$t = array_shift($stack);$tt[] = $t->val;if ($t->left) {array_push($stack, $t->left);}if ($t->right) {array_push($stack, $t->right);}$i++;}$result[] = $tt;}return $result;
}class TreeNode{var $val;var $left = NULL;var $right = NULL;function __construct($val){$this->val = $val;}
}$rt1 = new TreeNode(1);
$rt3 = new TreeNode(3);
$rt5 = new TreeNode(5);
$rt7 = new TreeNode(7);
$rt8 = new TreeNode(8);
$rt13 = new TreeNode(13);
$rt1->left = $rt3;
$rt1->right = $rt5;
$rt5->left = $rt7;
$rt5->right = $rt8;
$rt8->right = $rt13;
/*var_dump($rt1);
print_r($rt1);*/
$root = levelOrder($rt1);
print_r($root);
function levelOrder( $root )
{// write code here$queue = new SplQueue();if (!$root) {return [];}$result = [];$queue->push($root);while(!$queue->isEmpty()) {$len = $queue->count();$tmp = [];for($i = 0; $i < $len; $i++) {$current = $queue->shift();$tmp[] = $current->val;if($current->left) $queue->push($current->left);if($current->right) $queue->push($current->right);}$result[] = $tmp;}return $result;
}

package main
import "fmt"
type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode}
var ret [][]int
func levelOrder( root *TreeNode ) [][]int {// write code hereret = [][]int{}dfs(root, 0)return ret
}func dfs(root *TreeNode, level int) {if root != nil {if len(ret) == level {ret = append(ret, []int{})}ret[level] = append(ret[level], root.Val)dfs(root.Left, level+1)dfs(root.Right, level+1)}
}func main() {root1 := new(TreeNode)root1.Val = 1head2 := new(TreeNode)head2.Val = 2head3 := new(TreeNode)head3.Val = 3head4 := new(TreeNode)head4.Val = 4head5 := new(TreeNode)head5.Val = 5root1.Left = head3root1.Right = head2head2.Left = head5head2.Right = head4fmt.Printf("%+v\n", root1)fmt.Printf("%+v\n", root1.Left)fmt.Printf("%+v\n", root1.Right)rl := levelOrder(root1)//result :=  fmt.Sprintf("hh%+v" ,*root1)fmt.Println(rl)
}
func levelOrder( root *TreeNode ) [][]int {// write code hereif nil == root {return [][]int{}}var res [][]intnodes := []*TreeNode{root}for len(nodes)>0{//取出队列数据level := make([]int,0)currentNodes := nodes[:]nodes = make([]*TreeNode,0)for _,node:=range currentNodes{level = append(level,node.Val )if node.Left!=nil{nodes = append(nodes, node.Left)}if node.Right!=nil{nodes = append(nodes, node.Right)}}res = append(res, level)}return res
}

22-01-14最长无重复子数组

 最长无重复子数组
/*给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组输入:
[2,3,4,5]
返回值:
4
说明:
[2,3,4,5]是最长子数组
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)*/
function maxLength1($arr)
{$winMap = array();$leftSub = 0;$maxLen = 0;for ($i = 0; $i < count($arr); $i++) {$item = $arr[$i];if (isset($winMap[$item])) {$leftSub = max($leftSub, $winMap[$item] + 1);}$subLen = $i - $leftSub + 1;$maxLen = max($subLen, $maxLen);$winMap[$item] = $i;}return $maxLen;
}print_r([maxLength1([1, 3, 4, 5, 5, 7, 8])]);function maxLength($arr)
{$maxLength = 0;if (empty($arr)) {return $maxLength;}$zhiZhen = ['left' => 0,'right' => 0,];$map = [];foreach ($arr as $index => $value) {if (isset($map[$value])) {$zhiZhen['left'] = max($zhiZhen['left'], $map[$value] + 1);}$map[$value] = $index;$zhiZhen['right'] = $index;$curLength = $zhiZhen['right'] - $zhiZhen['left'];if ($curLength > $maxLength) {$maxLength = $curLength;}}return $maxLength + 1;
}print_r([maxLength([1, 3, 4, 5, 5, 7, 8])]);
package mainimport "fmt"func MaxLength1(arr []int) int {res := 0s := make([]int, 100000)j := 0for  i := 0 ; i < len(arr); i++ {s[arr[i]]++for j <= i && s[arr[i]] > 1 {s[arr[j]] --j++}if i-j + 1 > res {res = i - j + 1}}return  res
}func maxLength2(arr []int) int {left ,flag ,res := 0 ,make([]int, 100000) , 0for i:=0 ; i < len(arr) ; i++ {flag[arr[i]]++for left <= i && flag[arr[i]] > 1 {flag[arr[left]] --left ++}if i - left + 1 >res {res = i -left +1}}return res
}func main(){var arr1 = []int {1,3,4,5 ,5,6}length1 := MaxLength1(arr1)length2 := maxLength2(arr1)fmt.Println(length1)fmt.Println(length2)
}

2:算法php/go [二分查找 ;二叉树的层序遍历 ;最长无重复子数组]相关推荐

  1. 【数据结构与算法】之深入解析“二叉树的层序遍历II”的求解思路与算法示例

    一.题目要求 给你二叉树的根节点 root ,返回其节点值自底向上的层序遍历(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历). 示例 1: 输入:root = [3,9,20,null,nu ...

  2. 【数据结构与算法】之深入解析“二叉树的层序遍历”的求解思路与算法示例

    一.题目要求 给你二叉树的根节点 root ,返回其节点值的层序遍历 (即逐层地,从左到右访问所有节点). 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3

  3. 最长无重复子数组算法-java实现

    题目描述 最长无重复子数组: 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同. 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7] ...

  4. 二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法)

    二叉树的层序遍历算法 + 打印二叉树所有最左边的元素(算法) 层序遍历 /** * 树结构定义 */ private static class BinaryNode<T> {BinaryN ...

  5. 算法--- 二叉树的层序遍历 II

    题目 二叉树的层序遍历 II 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 给定二叉树 [3,9,20,null,null,15, ...

  6. 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...

  7. 代码随想录算法训练营day15 | 102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

    102. 二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {de ...

  8. 代码随想录算法训练营Day15|Leetcode102二叉树的层序遍历、Leetcode226翻转二叉树、Leetcode101对称二叉树

    Day15打卡! 时长:2h 今日感想:今天主要学习了二叉树层次遍历的思路方法和应用.题目看似简单,实则有很多细节,有时间可以做做其他相似的推荐题目~ Leetcode102 二叉树的层序遍历 题目链 ...

  9. 代码随想录算法训练营第十五天 | 102. 二叉树的层序遍历 | 226.翻转二叉树 | 101. 对称二叉树

    递归三部曲 确定递归函数的参数和返回值 确定终止条件 确定单层递归的逻辑 102. 二叉树的层序遍历 题解及想法 解法一 :递归法 class Solution {public List<Lis ...

  10. 代码随想录算法训练营第十三天|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    链接:代码随想录 文章目录 102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 解题方法 题目思路 示例代码 总结 解题思路 1.102.二叉树的层次遍历 解题思路 递归法,创立二维数组 ...

最新文章

  1. MAPREDUCE实践篇(2)
  2. 根本不值得一提的乒乓球国手王浩
  3. 剪了 20% 的刘海、120Hz 刷新率、1TB 存储,iPhone 13 来了!
  4. 关于那些表单的验证码
  5. NYOJ 570欧拉函数求和(欧拉函数数论入门)
  6. 华为鸿蒙可用型号,华为鸿蒙系统支持手机型号一览
  7. 雷达基础系列文章之四:雷达专业国内期刊
  8. vue+ele 使用及demo
  9. 如何编写爬虫获取淘宝网上所有的商品分类以及关键属性 销售属性 非关键属性数据
  10. 手机游戏怎么独占世界手游鳌头
  11. 邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现
  12. crontab根据定时检测程序状态,重启程序
  13. Linux-centos-7安装
  14. 2017年4月蓝桥杯模拟题
  15. aplayer得使用,记一次aplayer/Aplayer开发心得
  16. JavaScript工作面试常用知识点总结大全
  17. 3.1.13.fcntl函数介绍
  18. QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
  19. C#40000字全套精华教程,从入门到精通,一篇就够了:)
  20. 使用计算机完成怎样的工作计划,电脑上使用便签记录工作计划如何设置闹钟定时提醒?...

热门文章

  1. linux内核编程4部曲之二:增加linux内核系统调用
  2. android图标分组名称唯美,手机屏幕分组好听名字
  3. jupyter lab 导出笔记为pdf
  4. HTTP URL长度限制
  5. Effective Java 第三版 中文翻译
  6. Dxdesigner SCH to Mentor PCB
  7. eNSP常用命令 华为模拟器eNSP常用命令
  8. 计算机主机前后,Win10电脑主机前面的耳机插口没声音怎么办?前置面板插孔没声音...
  9. matlab无法显示图片
  10. Java项目:springboot网上书城系统