From 8d951dd0e681d013435cb3e0b3394396f7a12e09 Mon Sep 17 00:00:00 2001 From: b3t0 Date: Mon, 20 May 2024 16:15:37 -0600 Subject: [PATCH] Add other solution for find pick along the array --- GoBook.pdf | Bin 65147 -> 65161 bytes findPeak.go | 33 ++++++++++++ findPeak2.pdf | Bin 0 -> 2511 bytes findPeak2.tex | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 findPeak.go create mode 100644 findPeak2.pdf create mode 100644 findPeak2.tex diff --git a/GoBook.pdf b/GoBook.pdf index ce530ba6642fc294507fbcaf452e75523003f9e6..926b44db0b9112b19fb5330623587d0a9d4dae98 100644 GIT binary patch delta 297 zcmezUhq?1F^M;^r97YC)rY5E)CX=JSNh3J5-!i%N9gC7P6nrxCN-H)$`_{-7Xy{^U zU}5BDVPIfx=4fVSVeIB+Y;I!eW^QC^Zeif!Y^PvDP)RJ8zE5gidP#i@9T__P&w);`1ezm1R{SCPdZ`LZlH_twjw?WR*?Ana=QZ?Hj zd|^p%IQ{Map?>y%Tx$wW3tr$#%}XgRDN0Sul>;&Jld`yqOA?DpDvDCmxXet3t#dFdq?3WkPelh?o0tQS48m$xZFrsbox$b{+n z69eZQzSn2ay!(a`^V)?A(|Co2xrBvRaNOJf= arr[1] { + return 0 + } + if arr[n-1] >= arr[n-2] { + return n - 1 + } + + // check for ever other element + for i := 1; i < n-1; i++ { + // check if the neighbors are smaller + if arr[i] >= arr[i-1] && arr[i] >= arr[i+1] { + return i + } + } + return -1 // inficating no peak found +} + +func main() { + arr := []int{1, 3, 20, 4, 1, 21, 0} + fmt.Println("Index of a peak point is", findPeak(arr)) +} diff --git a/findPeak2.pdf b/findPeak2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..454a6510b8da61dbceae93bb2d5bb6d4079fa3e8 GIT binary patch literal 2511 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 literal 0 HcmV?d00001 diff --git a/findPeak2.tex b/findPeak2.tex new file mode 100644 index 0000000..cb9e349 --- /dev/null +++ b/findPeak2.tex @@ -0,0 +1,145 @@ +\documentclass[]{article} +\usepackage[utf8]{inputenc} +\usepackage[spanish]{babel} +\usepackage{listings} +\usepackage{xcolor} +\usepackage[a4paper, total={6.5in, 8in}]{geometry} + +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +\lstdefinestyle{mystyle}{ + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} + +\lstset{style=mystyle} + +\newcommand{\quotes}[1]{``#1''} + +%opening +\title{Soluciones a los principales problemas con arreglos} +\author{betology} +\date{} + +\begin{document} + +\maketitle + +\section{Código en Go para la función findPeak} + +La siguiente función en Go encuentra todos los picos en un arreglo. Un elemento es considerado un pico si es mayor o igual a sus vecinos. A continuación, se presenta el código con su respectiva explicación. + +\begin{lstlisting}[language=Go, caption={Código en Go para encontrar todos los picos en un arreglo}] +package main + +import "fmt" + +// findPeaks finds all peaks in the array +func findPeaks(arr []int) []int { + var peaks []int + n := len(arr) + if n == 0 { + return peaks + } + + // Check if the first element is a peak + if n == 1 || arr[0] >= arr[1] { + peaks = append(peaks, arr[0]) + } + + // Check for peaks in the middle of the array + for i := 1; i < n-1; i++ { + if arr[i] >= arr[i-1] && arr[i] >= arr[i+1] { + peaks = append(peaks, arr[i]) + } + } + + // Check if the last element is a peak + if n > 1 && arr[n-1] >= arr[n-2] { + peaks = append(peaks, arr[n-1]) + } + + return peaks +} + +func main() { + arr := []int{1, 3, 20, 4, 1, 0, 5, 2, 1, 4, 1} + peaks := findPeaks(arr) + fmt.Println("Peaks are:", peaks) +} +\end{lstlisting} + +\section{Explicación del código en Go} + +Explicación de cada línea: + +\begin{lstlisting}[language=Go, numbers=left, stepnumber=1] +package main + +import "fmt" +\end{lstlisting} + +\textbf{Líneas 1-2:} Definimos el paquete principal \texttt{main} y luego importamos el paquete \texttt{fmt}, que necesitaremos para imprimir los resultados en la consola. + +\begin{lstlisting}[language=Go, numbers=left, firstnumber=3] +// findPeaks finds all peaks in the array +func findPeaks(arr []int) []int { +\end{lstlisting} + +\textbf{Líneas 3-5:} Definimos una función llamada \texttt{findPeaks} que toma una matriz de enteros como entrada y devuelve una slice de enteros (que contiene todos los picos). + +\begin{lstlisting}[language=Go, numbers=left, firstnumber=6] + var peaks []int + n := len(arr) + if n == 0 { + return peaks + } +\end{lstlisting} + +\textbf{Líneas 6-10:} Inicializamos una slice vacía llamada \texttt{peaks} para almacenar los picos encontrados. Luego, obtenemos la longitud de la matriz de entrada \texttt{arr} y verificamos si está vacía. Si lo está, devolvemos la slice vacía. + +\begin{lstlisting}[language=Go, numbers=left, firstnumber=11] + // Check if the first element is a peak + if n == 1 || arr[0] >= arr[1] { + peaks = append(peaks, arr[0]) + } +\end{lstlisting} + +\textbf{Líneas 11-15:} Comprobamos si el primer elemento de la matriz es un pico. Si la longitud de la matriz es 1 o si el primer elemento es mayor o igual que el segundo, entonces añadimos el primer elemento a la slice de picos. + +\begin{lstlisting}[language=Go, numbers=left, firstnumber=16] + // Check for peaks in the middle of the array + for i := 1; i < n-1; i++ { + if arr[i] >= arr[i-1] && arr[i] >= arr[i+1] { + peaks = append(peaks, arr[i]) + } + } +\end{lstlisting} + +\textbf{Líneas 16-20:} Iteramos a través de los elementos intermedios de la matriz y verificamos si cada elemento es un pico comparándolo con sus vecinos. Si es así, lo añadimos a la slice de picos. + +\begin{lstlisting}[language=Go, numbers=left, firstnumber=21] + // Check if the last element is a peak + if n > 1 && arr[n-1] >= arr[n-2] { + peaks = append(peaks, arr[n-1]) + } +\end{lstlisting} + +\textbf{Líneas 21-24:} Comprobamos si el último elemento de la matriz es un pico y lo añadimos a