这是 LeetCode 问题:189. 旋转数组:
给定一个数组,将数组向右旋转 k 步,其中 k 为非负数。
示例1:
输入:[1,2,3,4,5,6,7] 且 k = 3
输出:[5,6,7,1,2,3,4]
这是我的解决方案:
func rotate(nums []int, k int) {
k = k % len(nums)
nums = append(nums[k:],nums[0:k]...)
fmt.Println(nums)
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的算法,但它不起作用。
我是围棋新手。我想nums是按值传递的,并且更改nums不会影响真实的nums.
我怎样才能做到这一点?
我正在使用统一成本网格,只允许在正交方向上移动.这被用作游戏蛇的基地,蛇必须不断移动并尝试在棋盘上吃苹果.使用经典的AStar算法完成食物的位置和避免碰撞,以找到蛇头和食物之间的最短路径.然而,这种方法有时导致蛇去食物,导致它没有通往下一个食物的明确路径.蛇最终卡在一个不规则形状的矩形中,此时没有未来的模拟.
我的问题是:有没有办法找到不规则矩形内最长的动作链,以便保持最长的活动,并且可能让蛇的尾巴阻挡通往下一个食物的路径?我看过汉密尔顿算法试图访问所有节点,但似乎没有不规则形状的解决方案.解决方案不一定是完美的,但它应该总是试图让蛇最好的机会逃离陷阱.
有什么想法吗?
给定一个任意的时间偏移,如何创建一个time.Location表示该时间偏移的可用对象?
以下代码使用偏移量解析时间,但fmt.Println(t.Location())随后不返回任何信息:
func main() {
offset := "+1100"
t, err := time.Parse("15:04 GMT-0700","15:06 GMT"+offset)
if err != nil {
fmt.Println("fail", err)
}
fmt.Println(t)
fmt.Println(t.UTC())
fmt.Println(t.Location())
}
Run Code Online (Sandbox Code Playgroud)
游乐场:https : //play.golang.org/p/j_E28qJ8Vgy
基本上我有一些带有时间偏移的时间数据,但没有位置数据,我想创建一个time.Location对象来确保记录 GMT 偏移。然后能够输出相对于最终用户实际位置时间偏移的时间。
Go的当前官方编译器(http://code.google.com/p/go/)目前使用手工制作的,可以说是神秘的代码生成器,其中包括将自定义部分注入ELF二进制文件.
这种方法产生了很多与直接读取和/或写入ELF信息的实用程序相关的错误,例如ldd,objdump或strip.
我相信这可以通过使用经过良好测试的跨平台代码生成器(例如LLVM)来防止,然后只使用OS附带的链接工具,例如ld在Unix/Linux(或ld.exe在Windows link.exe上使用MinGW),或在Windows上使用视觉工作室.
那么为什么Go使用它自己的代码生成器呢?它真的只是重新发明轮子吗?或者背后有更重要的原因吗?
使用Ubuntu,我应该采取什么步骤将Go源代码编译成Windows可执行文件?
我在Ubuntu上运行Go编译器,使用安装 sudo apt-get install golang
我已成功编译并执行了一个Trivial示例服务器的代码(请参阅http://golang.org/pkg/websocket/#Handler)
package main
import (
"http"
"io"
"websocket"
)
// Echo the data received on the Web Socket.
func EchoServer(ws *websocket.Conn) {
io.Copy(ws, ws);
}
func main() {
http.Handle("/echo", websocket.Handler(EchoServer));
err := http.ListenAndServe(":12345", nil);
if err != nil {
panic("ListenAndServe: " + err.String())
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用我的Chromium版本(16.0.912.77)连接到服务器.我假设Chrome已经实现了RFC 6455 Websocket(版本13),但是Ubuntu golang包中的go websocket库已经过时了.
所以,我的问题是:如何只将websocket包更新到最新版本?
package main
import (
"fmt"
"net"
)
func main() {
var localaddr net.TCPAddr
var remoteaddr net.TCPAddr
localaddr.IP = net.ParseIP("192.168.1.104")
localaddr.Port = 6000
remoteaddr.IP = net.ParseIP("192.168.1.104")
remoteaddr.Port = 5000
if localaddr.IP == nil || remoteaddr.IP == nil {
fmt.Println("error")
}
if _, err := net.DialTCP("tcp", &localaddr, &remoteaddr); err != nil {
fmt.Println(err)
}
fmt.Println("End")
}
Run Code Online (Sandbox Code Playgroud)
如果该函数指定本地 IP 地址,它总是报告运行时错误“dial tcp 192.168.1.104:5000: 提供了无效的参数。” 我很困惑,本地 IP 地址应该始终为零吗?
go版本:1.1 Beta 操作系统:Win7 64位
在go 1.0.3中尝试过,看起来还可以
我想定义一个这样的类型:
type S map[string]interface{}
Run Code Online (Sandbox Code Playgroud)
我想在这个类型中添加一个方法:
func (s *S) Get( k string) (interface {}){
return s[k]
}
Run Code Online (Sandbox Code Playgroud)
当程序运行时,出现如下错误:
invalid operation: s[k] (index of type *S)
Run Code Online (Sandbox Code Playgroud)
那么,如何定义类型并将方法添加到类型中?
我有一张地图
var users = make(map[int]User)
Run Code Online (Sandbox Code Playgroud)
我正在填写地图,一切都很好.后来,我想分配给User的一个值,但是我收到一个错误.
type User struct {
Id int
Connected bool
}
users[id].Connected = true // Error
Run Code Online (Sandbox Code Playgroud)
我也尝试编写一个分配给它的函数,但这也不起作用.
我已经安装了我的Ubuntu桌面,它在我关闭计算机之前工作正常.
现在,当我启动我的机器并重新开始我的项目工作时,我得到了这个
$ go build
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
Run Code Online (Sandbox Code Playgroud)
当我尝试建立一个项目时.
我在断电之前做的唯一可能有一些影响的事情是安装godoc使用
sudo apt-get install golang-doc
Run Code Online (Sandbox Code Playgroud)
我已经通过下载go1.10.1.linux-amd64.tar.gz文件直接安装,而不是使用apt-get
去环境
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/me/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/me/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build255010769=/tmp/go-build -gno-record-gcc-switches"
Run Code Online (Sandbox Code Playgroud)
$ go版本 …